Commit Graph
82 Commits
Author SHA1 Message Date
Lucas Nogueira 46f7c878a0 chore: fmt 2026-10-09 15:08:52 -03:00
Lucas Fernandes Nogueira e03dca60e7 fix(fs): accept absolute paths in the iOS security-scope commands (#3628)
In plugins/fs/src/commands.rs, start/stop_accessing_security_scoped_resource
only handled SafeFilePath::Url, so a plain path was a silent no-op
although the JS docs say "path or file:// URL" (and
Fs::stop_accessing_security_scoped_resource accepts paths).

Absolute paths are now converted to file:// URLs first; relative paths keep
being ignored. iOS-only code: formatted but not compiled here (the iOS
tauri build script fails in this environment).
2026-10-09 13:25:05 -03:00
Lucas Fernandes Nogueira 3a9000177c fix(fs): resolve symlinks of missing paths before checking the scope (#3627)
In plugins/fs/src/commands.rs resolve_path / is_forbidden, only paths
that already existed were canonicalized, so a new file below a symlinked
directory in the scope was matched by its unresolved path and written
outside of the scope. Relative symlink targets were resolved against the
process CWD, only the link target was checked against deny patterns, and
resolution errors made is_forbidden fail open.

resolve_path now computes the real path (canonical nearest existing
ancestor + remaining components, following dangling symlinks relative to
their parent, bounded to 40 links) and checks it against the allow and deny
patterns; deny patterns also match the path as given. Resolution errors
fail closed. Unit tests cover symlinked ancestors, relative and dangling
links and loops.
2026-10-09 13:21:34 -03:00
Lucas Fernandes Nogueira a934743b73 feat(fs): allow disabling the drag and drop scope extension (#3637)
In plugins/fs/src/lib.rs on_event, every path dropped onto any window is
added to the global runtime scope, directories recursively, with no
opt-out.

Adds the `scopeDroppedPaths` plugin config option (default true, the
current behaviour) so apps can turn it off. Changing the default or
scoping it per window is deferred to v3.
2026-10-09 13:07:34 -03:00
Lucas Fernandes Nogueira 085a02835d fix(fs): return an error when Android returns no file descriptor (#3636)
In plugins/fs/src/android.rs resolve_content_uri, a null `fd` from
getFileDescriptor (openAssetFileDescriptor returning null, e.g. for
virtual files) hit unimplemented!() and panicked inside the command handler.

It now returns an Unsupported I/O error. Also switches the two
io::Error::new(Other, ..) calls to io::Error::other, which clippy flags on
the Android target. Checked with cargo clippy --target aarch64-linux-android.
2026-10-09 13:06:59 -03:00
Lucas Fernandes Nogueira 5de7ebfc95 fix(fs): do not deserialize customFlags from IPC (#3634)
In plugins/fs/src/lib.rs OpenOptions, custom_flags was deserializable
from the `open` command arguments even though it is not in the TS types,
so a webview with a read-only permission set could pass arbitrary open(2)
flags such as O_TRUNC.

The field is now #[serde(skip)]; Rust callers still set it through
OpenOptionsExt. Rejecting write/truncate/create options of `open` under
read-only sets changes permission semantics and is deferred to v3.
2026-10-09 13:05:12 -03:00
Lucas Fernandes Nogueira 77d00a4f54 fix(fs): reject negative offsets when seeking from the start (#3633)
In plugins/fs/src/commands.rs seek, `SeekFrom::Start(offset as u64)`
turned -1 into u64::MAX. The offset is now converted with u64::try_from
and a negative one is an error. E2E spec added.
2026-10-09 13:04:44 -03:00
Lucas Fernandes Nogueira 5c144e7466 fix(fs): only split UTF-16 lines on aligned line feeds (#3631)
In plugins/fs/src/commands.rs read_until_bytes / LinesBytes, the line
feed sequence was matched at any byte offset, so UTF-16LE "ਗĀ"
(17 0a 00 01) or UTF-16BE "Āਗ" (01 00 0a 17) split mid code unit and every
following line was decoded misaligned.

Line feed and carriage return sequences now only match on a multiple of
their length from the start of the line. Unit tests with both examples
(they fail without the fix).
2026-10-09 13:04:09 -03:00
Lucas Fernandes Nogueira 5e6c023a79 fix(fs): cap the buffer allocated by the read command (#3626)
In plugins/fs/src/commands.rs read, `vec![0; len]` used the length sent
by the webview as is, so a huge `len` aborted the process on allocation
failure, and the whole buffer (not only the bytes read) was sent back.

The length is now capped to the rest of the file (at least 64 KiB) for
regular files and to 64 MiB otherwise, the allocation uses try_reserve so a
failure is an error, and the buffer is truncated to the bytes read. The JS
side only ever used the first `nread` bytes. Unit test for the cap.
2026-10-09 12:58:35 -03:00
Lucas Nogueira f460570b44 chore: fmt 2026-09-26 15:57:33 -03:00
Lucas Nogueira a433ec09d1 fix: mobile clippy warnings 2026-09-26 15:57:33 -03:00
Lucas Nogueira 3d8a3c877b chore: edition 2024 2026-09-26 15:36:22 -03:00
Lucas Fernandes Nogueira 1cae06a55b fix(fs): report read errors of readTextFileLines (#3625)
* fix(fs): report read errors of readTextFileLines

In plugins/fs/src/commands.rs read_text_file_lines_next, a read error was
mapped to "not done, empty line", so a persistent error such as EISDIR
(File::open of a directory succeeds on Unix) made the iterator yield ""
forever and the error was swallowed.

The command now closes the resource and returns the error; the JS iterator
resets its rid so a new iteration starts over. api-iife.js regenerated. E2E
spec iterates a directory and expects a rejection.

* fix(fs): close the file when a readTextFileLines loop exits early

In plugins/fs/guest-js/index.ts readTextFileLines, the async iterator did
not implement return(), so breaking out of a for await loop left the
StdLinesResource (an open file) in the webview resource table.

return() now closes the resource and resets the iterator. api-iife.js
regenerated. E2E spec breaks out of a loop, checks the resource id is no
longer valid and that iterating again starts over.
2026-09-23 13:05:04 -03:00
Lucas Fernandes Nogueira 9106093f77 fix(fs): map open options to valid Android modes (#3624)
In plugins/fs/src/lib.rs OpenOptions::android_mode, the mode was built by
concatenating r/w/t/a, so open(url, {append: true}) (read defaults to
true) produced "ra" and write+truncate+append "wta", which
ParcelFileDescriptor.parseMode / ContentResolver reject.

The options now map to r, w, wt, wa, rw or rwt. append wins over the
default read (no read+append mode exists). create/createNew still have no
Android equivalent (documented on the function). Unit tests for the
mapping, compiled on the host with cfg(test).
2026-09-23 12:58:28 -03:00
Lucas Fernandes Nogueira b46a88ff55 fix(fs): reject malformed write_file options instead of ignoring them (#3622)
In plugins/fs/src/commands.rs write_file_inner, a malformed or non-ASCII
`options` header was dropped with .ok(), so baseDir/append/createNew were
silently ignored and the call became a truncating write to the raw path;
the JSON array body fallback truncated values above 255 and dropped
non-numbers.

The header is parsed with parse_write_file_options: empty, `undefined`
(what fetch sends for JSON.stringify(undefined)) and `null` mean no
options, anything else must parse. Array bodies must only contain bytes.
Unit test for the header parser; e2e spec for writes without options,
which is the case the `undefined` handling keeps working.
2026-09-23 12:57:49 -03:00
Lucas Fernandes Nogueira 0c84c917e3 fix(fs): log file watcher errors (#3621)
In plugins/fs/src/watcher.rs, notify errors were discarded (TODO), so a
watch that died left no trace. They are now logged with log::error!.
Reporting them to the JS callback would change the event payload and is
deferred to v3.
2026-09-23 12:57:33 -03:00
Lucas Fernandes Nogueira 28d644572c test(docs): run doctest on CI, make sure doctests pass (#3620)
* test(docs): run doctest on CI, make sure doctests pass

* no_run on dialog doctests [skip ci]
2026-09-22 13:18:21 -03:00
Lucas Nogueira a87a3c7d44 chore: update documentation 2026-09-22 11:30:47 -03:00
Tony f8053e659e docs: cargo features (#3527)
* dialog

* fs

* geolocation

* haptic

* log

* single instance

* notification

* updater

* ##

* persisted scopes

* stronghold

* sql

* upload

* websocket

* http
(this one was too long that I generated through codex, didn't review yet)

* add change file

* no persisted-scope-js

* add `://`

* Merge branch 'v2' into document-cargo-features

* update system-proxy docs

* finish http docs

* notification doesn't need version bumps

* clean up docs
2026-08-05 15:48:11 +08:00
Tony 7e45774610 refactor(fs): cfg gate some ios code (#3510) 2026-07-21 14:42:45 +08:00
Jsu e571e0be9d docs(fs): typo wether -> whether in commands.rs (#3429) 2026-05-23 21:28:55 +02:00
Lucas Fernandes NogueiraandFabianLars f5f68063e4 feat(fs): access security scoped resources on iOS (#3185)
Co-authored-by: FabianLars <30730186+FabianLars@users.noreply.github.com>
2026-03-04 13:59:03 +01:00
aiueo13andOkaYu 6c3da6d290 fix(fs): use correct line detection for encodings in readTextFileLines (#3273)
Co-authored-by: OkaYu <aiueo13>
2026-02-13 03:41:43 +02:00
Amr BashirandLucas Nogueira 6b5b1053ba enhance(fs): improve error message when resolving path in debug builds (#1939)
* enhance(fs): improve error message when resolving path in debug builds

closes #11338

* fix compilation

* deduplicate read_file code

* fix compile

* fix compile again

* fmt

* comma

* add change file

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2025-10-09 08:58:08 -03:00
Tony dac4d53724 refactor(fs): reduce overhead of watch (#2613) 2025-04-19 13:35:14 +02:00
renovate[bot]andFabianLars 71f95c9f05 chore(deps): update rust crate windows to 0.60 (v2) (#2445)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: FabianLars <github@fabianlars.de>
2025-02-27 11:45:55 +01:00
enri90andFabianLars 05c62d731f feat(upload): Added body to download function (#1523)
Co-authored-by: FabianLars <fabianlars@fabianlars.de>
2024-12-03 14:35:11 +01:00
ayang fef76bd504 feat(fs): add the size method to get the size of a file or directory (#2095) 2024-11-26 14:09:42 +02:00
Fabian-Lars fecfd5533a fix(fs)!: use tauri::scope::fs::Scope (#2070) 2024-11-21 16:57:25 +02:00
Amr Bashir ed981027dd feat(fs): improve readTextFile and readTextFileLines performance (#1962) 2024-11-21 15:43:51 +02:00
Fabian-Lars 51856e9e0a docs: Remove header image from inline docs (#2045) 2024-11-13 16:07:29 +01:00
Amr Bashir 3e78173df9 fix(fs): ignore metadata error while reading dir entries (#2018)
* fix(fs):  ignore metadata error while reading dir entries

closes #2014

* remove package manager
2024-11-11 18:02:03 +02:00
renovate[bot]andFabianLars 9a7092ca44 fix(deps): update rust crate notify to v7 (v2) (#1999)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: FabianLars <fabianlars@fabianlars.de>
2024-11-04 15:56:31 +01:00
bWanShiTong 14cee64c82 fix(fs): fix compilation on targets with pointer width 16 and 32 (#1958) 2024-10-21 15:07:55 +03:00
Amr BashirandLucas Nogueira ae8024565f perf(fs): improve FileHandle.read performance (#1950)
* perf(fs): improve `FileHandle.read` performance

* handle different target pointer width

* improve `writeTextFile` performance

* revert packageManager field

* change file

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-10-20 08:49:01 -03:00
Amr BashirandLucas Nogueira 44273b9889 fix(shell): fix schema requiring sidecar property even though it is optional (#1839)
* fix(shell): fix schema requiring `sidecar` property even though it is optional

* fix clippy

* make `cmd` and `sidecar` exclusive

* make args optional

* cleanup

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-10-01 10:16:14 -03:00
Fabian-Lars fc9b189e83 fix(fs): ignore OS specific paths in scope deserialization (#1837) 2024-09-26 02:43:33 +03:00
Jaken Herman dd514e7a88 Docs: contaiend -> contained typos (#1802) 2024-09-17 19:31:55 +03:00
SRutileandLucas Nogueira 9291e4d2ca fix(fs): support any UTF-8 path in writeFile (#1640)
* In the `writeFile` function, when `options.baseDir` is not set, convert `path` to URL to avoid errors caused by Chinese characters.

* fmt

* use TextEncoder

* use percent encoding

* add change file

* fmt

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2024-09-11 12:02:24 -03:00
Amr Bashir a2fe55512f refactor: add methods and implement traits for FilePath and SafeFilePath (#1727)
* refactor: add methods and implement traits for `FilePath` and `SafeFilePath`

closes #1726

* clippy

* path -> as_path

* fix prettierignore

* Discard changes to Cargo.lock

* Discard changes to Cargo.toml

* update tauri deps
2024-09-05 14:12:40 +03:00
Lucas Fernandes Nogueira 51819c601f fix(fs): writeFile command implementation on Android (#1708) 2024-09-02 13:13:53 -03:00
Tony f7280c8830 fix(fs): can't use Windows path (#1710)
* Fix fs can't use Windows path

* Add change file

* Implement `Deserialize` instead

* Rename FilePath's visitor to FilePathVisitor

* Add todo and test

* Clippy

* Unused variable
2024-09-02 18:24:37 +03:00
mikoto2000andLucas Nogueira 448846b834 feat(fs): resolve content URIs on Android (#1658)
* Implemented writeTextFile on Android.

* Added license headers.

* fix fmt checks.

* implement more file APIs

* change file

* cleanup

* refactor dialog plugin to leverage new FS APIs

* implement metadata functions

* fix build

* expose FS rust API

* resolve resources on android

* update pnpm

* update docs

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-08-23 13:35:53 -03:00
Fabian-Lars 2b269f1b6d fix(fs): Apply requireLiteralLeadingDot config (#1585)
* fix(fs): Apply requireLiteralLeadingDot config

* fix deserialization

* reword changefile [skip ci]
2024-07-25 16:11:26 +02:00
Lucas Fernandes Nogueira 22a17980ff feat: update to tauri beta.24 (#1537)
* feat: update to tauri beta.24

* remove .tauri

* pnpm build
2024-07-12 17:59:17 -03:00
Fabian-Lars 1146f068e1 fix(fs): Make read/write commands async to not block the main thread (#1477)
* fix(fs): Make commands async to not block the main thread so long

* more async

* changefile
2024-06-24 11:27:34 +03:00
Lucas Fernandes Nogueira 1d8662e71a feat(fs): use IPC streaming for read and write file (#1251)
* feat(fs): use IPC streaming for read and write file

* fix build

* clippy
2024-05-29 22:17:47 -03:00
Tony edf9a4f29d fix(fs): missing debouncer rename cache (#1245)
* Fix missing debouncer rename cache

* Add change file

* Format
2024-04-24 10:50:12 +02:00
Fabian-Lars b115fd22e0 fix(fs): Prevent deadlock when scope listeners are registered. (#1221)
* fix(fs): Prevent deadlock when scope listeners are registered.

* block
2024-04-22 20:09:12 +02:00
Amr Bashir e3d41f4011 fix: use webview's resources table (#1191)
* fix: use webview's resources table

* fix clipboard into_img usage

* fix mobile
2024-04-18 03:19:24 +02:00