046fc17e53
Previously, FileSystem.readFileAsString, writeFileAsString, and listDirectoryContents only validated the requested path textually against the configured IDE workspace roots. A symlink inside the workspace could therefore resolve to a location outside the workspace and still be accessed. This patch resolves workspace roots and requested filesystem targets before performing the authorization check, and resolves the nearest existing ancestor for write targets so new files inside a workspace continue to work. It also adds a source-backed regression test in pkg/dtd_impl/test/dtd_test.dart that verifies read, write, and directory listing requests through a symlink escaping the workspace all fail with permission denied. R=bquinlan@google.com Tested: - HOME=/tmp XDG_CONFIG_HOME=/tmp DART_SUPPRESS_ANALYTICS=1 /tmp/dart-sdk-3.12.0-221.0.dev/dart-sdk/bin/dart test pkg/dtd_impl/test/dtd_test.dart Change-Id: I7abf00f6220bff42b352e2942f396167af53adb8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/493420 Reviewed-by: Jessy Yameogo <yjessy@google.com> Auto-Submit: 진호 <orangemush777@gmail.com> Reviewed-by: Ben Konyi <bkonyi@google.com> Commit-Queue: Ben Konyi <bkonyi@google.com>
Dart Tooling Daemon
The server implementation for the Dart Tooling Daemon. This is meant to be run by our internal tooling and facilitates communication between our internal tools.
For details on the protocol used to communicate with the Dart Tooling Daemon see The DTD Protocol
Running the Dart Tooling Daemon
Compiled version
To run the tooling daemon compiled with the Dart SDK:
- make sure to build with
create_platform_sdk - e.g.
./tools/build.py create_platform_sdk
- run
dart tooling-daemon:info The dart binary should be the one you just built in step 1.
Testing changes locally
To quickly test changes to the tooling daemon, start it by running:
dart run bin/dtd.dart
Running tests
To run the tests under the test/ directory, run dart test test/.
However, if you are testing changes that span pkg/dtd and pkg/dtd_impl,
you'll need to build the Dart SDK, and then use the built Dart executable to run
the test.
- Build the Dart SDK:
./tools/build.py create_platform_sdk - Run the test:
xcodebuild/ReleaseARM64/dart-sdk/bin/dart test test/