Visitar URL original
[flutter_tools] Don't crash on non-UTF-8 plugin pubspec.yaml by Aurelius51 · Pull Request #188976 · flutter/flutter · GitHub
Skip to content

[flutter_tools] Don't crash on non-UTF-8 plugin pubspec.yaml - #188976

Merged
auto-submit[bot] merged 3 commits into
flutter:masterfrom
Aurelius51:fix-188970-utf8-pubspec-crash
Jul 8, 2026
Merged

auto-submit[bot] merged 3 commits into
flutter:masterfrom
Aurelius51:fix-188970-utf8-pubspec-crash

Conversation

@Aurelius51

Copy link
Copy Markdown
Contributor

Fixes #188970

_pluginFromPackage caught only YamlException around the plugin's
pubspec.yaml read, so a pubspec containing non-UTF-8 bytes threw an
uncaught FileSystemException and crashed the tool. This mirrors the
sibling pubspec-cache reader (added in #184528), catching
FileSystemException and skipping the unreadable package.

Tests

Added a regression test in plugins_test.dart that corrupts a plugin's
pubspec.yaml with invalid UTF-8 and asserts the tool skips it instead
of crashing. Verified it fails without the fix
(FileSystemException: Invalid UTF-8 byte) and passes with it.

Design note

dart:io surfaces UTF-8 decode failures as a generic
FileSystemException with no narrower subtype, so this catches
FileSystemException, consistent with the sibling buildPubspecCache.
Genuine I/O errors on an existing pubspec are therefore also skipped
rather than crashing, which matches existing behavior and is preferable
to failing every command over one unreadable transitive dependency.

@github-actions github-actions Bot added the tool Affects the "flutter" command-line tool. See also t: labels. label Jul 5, 2026
@google-cla

google-cla Bot commented Jul 5, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds a FileSystemException catch block when reading a plugin's manifest in flutter_plugins.dart to prevent crashes from unreadable files, such as those with invalid UTF-8 encoding. A corresponding regression test is added in plugins_test.dart to ensure invalid plugins are skipped. There are no review comments, and I have no feedback to provide.

@Aurelius51 Aurelius51 closed this Jul 5, 2026
@Aurelius51 Aurelius51 reopened this Jul 5, 2026
@fluttergithubbot

Copy link
Copy Markdown
Contributor

An existing Git SHA, 615e00afabe16de19da36a8a68d5ef32b7c492a0, was detected, and no actions were taken.

To re-trigger presubmits after closing or re-opeing a PR, or pushing a HEAD commit (i.e. with --force) that already was pushed before, push a blank commit (git commit --allow-empty -m "Trigger Build") or rebase to continue.

@Aurelius51 Aurelius51 closed this Jul 5, 2026
@Aurelius51 Aurelius51 reopened this Jul 5, 2026
@fluttergithubbot

Copy link
Copy Markdown
Contributor

An existing Git SHA, 615e00afabe16de19da36a8a68d5ef32b7c492a0, was detected, and no actions were taken.

To re-trigger presubmits after closing or re-opeing a PR, or pushing a HEAD commit (i.e. with --force) that already was pushed before, push a blank commit (git commit --allow-empty -m "Trigger Build") or rebase to continue.

@Aurelius51
Aurelius51 force-pushed the fix-188970-utf8-pubspec-crash branch from 615e00a to 0308e13 Compare July 5, 2026 02:46
'bad_plugin',
]);
// Write bytes that are not valid UTF-8, so readAsString throws a FileSystemException.
pluginDirs[1].childFile('pubspec.yaml').writeAsBytesSync(<int>[0xff, 0xfe, 0xfd]);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, I think this can be Uint8List ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

switched to Uint8List.fromList.


// The unreadable plugin is skipped, but the readable one is still found.
final List<Plugin> plugins = await pluginsFuture;
expect(plugins.map((Plugin plugin) => plugin.name), contains('good_plugin'));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could avoid the double plugins.map((Plugin plugin) => plugin.name), by using a for loop here

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Replaced the double map with a single collection that builds the names list once, and both assertions now check that list (1fb9ba6)

@navaronbracke navaronbracke added the CICD Run CI/CD label Jul 5, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Jul 10, 2026
…12169)

Manual roll Flutter from 91939cc4db78 to dc2a8703e12b (50 revisions)

Manual roll requested by bensonluk@google.com

flutter/flutter@91939cc...dc2a870

2026-07-09 chris@bracken.jp [ios,macos] Update swiftc.py flags to match swiftc (flutter/flutter#189174)
2026-07-09 jesswon@google.com [AGP 9] Update Warn Version to AGP 9+ (flutter/flutter#189109)
2026-07-09 154381524+flutteractionsbot@users.noreply.github.com Sync CHANGELOG.md from stable (flutter/flutter#189203)
2026-07-09 mdebbar@google.com [web] Roll Chrome to 145 (framework) (flutter/flutter#182861)
2026-07-09 engine-flutter-autoroll@skia.org Roll Packages from 52d84d6 to 20928d5 (6 revisions) (flutter/flutter#189194)
2026-07-09 zhongliu88889@gmail.com [web] Avoid absolute positioning for base CanvasKit canvas (flutter/flutter#188337)
2026-07-09 engine-flutter-autoroll@skia.org Roll Dart SDK from cdb7217e65aa to a11fb7ed40a5 (6 revisions) (flutter/flutter#189195)
2026-07-09 matt.kosarek@canonical.com Fix dereference of nullptr in the moved-to-rect signal in the Linux embedder (flutter/flutter#189152)
2026-07-09 katelovett@google.com Fix data for design packages (flutter/flutter#189140)
2026-07-09 engine-flutter-autoroll@skia.org Roll Skia from 7b42d1251d54 to ab3a7b98c94d (2 revisions) (flutter/flutter#189181)
2026-07-09 engine-flutter-autoroll@skia.org Roll Skia from 05d9d214e0b7 to 7b42d1251d54 (2 revisions) (flutter/flutter#189175)
2026-07-09 engine-flutter-autoroll@skia.org Roll Skia from 542c8bdd7f4f to 05d9d214e0b7 (4 revisions) (flutter/flutter#189169)
2026-07-09 97480502+b-luk@users.noreply.github.com UberSDF rect handling for thin (line-like) rectangles (flutter/flutter#188821)
2026-07-09 engine-flutter-autoroll@skia.org Roll Skia from dd572c07f63c to 542c8bdd7f4f (4 revisions) (flutter/flutter#189160)
2026-07-09 markzipan@google.com [flutter_tools] Fix hot restart for WASM web builds (flutter/flutter#187898)
2026-07-08 robert.ancell@canonical.com Split FlViewRenderer into OpenGL and software backends (flutter/flutter#188824)
2026-07-08 awolff@google.com Promote android_hardware_smoke_tests out of bringup in CI (flutter/flutter#189081)
2026-07-08 engine-flutter-autoroll@skia.org Roll Skia from 8df24be66531 to dd572c07f63c (4 revisions) (flutter/flutter#189150)
2026-07-08 matt.kosarek@canonical.com Expose LinuxWindowRegistrar on _window_linux.dart in order to better support out of tree LinuxWindowingOwners (flutter/flutter#188917)
2026-07-08 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#189149)
2026-07-08 codefu@google.com fix(ci): harden some workflows (flutter/flutter#189087)
2026-07-08 engine-flutter-autoroll@skia.org Roll Skia from 51a62da33da0 to 8df24be66531 (1 revision) (flutter/flutter#189139)
2026-07-08 iinozemtsev@google.com Roll Dart SDK to Dart 3.13 beta3 (flutter/flutter#189122)
2026-07-08 digvijaysinghiam@gmail.com [flutter_tools] Don't crash on non-UTF-8 plugin pubspec.yaml (flutter/flutter#188976)
2026-07-08 bkonyi@google.com [flutter_tools] Watch transitive #include headers for FragmentProgram hot reload (flutter/flutter#187945)
2026-07-08 engine-flutter-autoroll@skia.org Roll Skia from 040d9f55de00 to 51a62da33da0 (1 revision) (flutter/flutter#189135)
2026-07-08 engine-flutter-autoroll@skia.org Roll Packages from 92525f5 to 52d84d6 (7 revisions) (flutter/flutter#189134)
2026-07-08 bkonyi@google.com [flutter_tools] Forcefully kill hung subprocesses 5 seconds after timeout (flutter/flutter#187178)
2026-07-08 malo.allee@gmail.com Expose the app's build name and number as compile-time constants (flutter/flutter#187935)
2026-07-08 engine-flutter-autoroll@skia.org Roll Skia from 1ff92f879815 to 040d9f55de00 (1 revision) (flutter/flutter#189131)
2026-07-08 engine-flutter-autoroll@skia.org Roll Skia from 6137414bef5c to 1ff92f879815 (6 revisions) (flutter/flutter#189126)
2026-07-08 brackenavaron@gmail.com [test cross imports] More test/rendering + flutter_test/test fixes (flutter/flutter#188954)
2026-07-08 112751483+shivanshu877@users.noreply.github.com engine: explain why each candidate build was skipped in Flutter web loader (flutter/flutter#186254)
2026-07-08 chris@bracken.jp vscode: add missing unicode.h (flutter/flutter#189102)
2026-07-08 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from 7RjQJBW3m-3Jl-7jr... to QcRFUtvCw2EobfJ8s... (flutter/flutter#189104)
2026-07-08 engine-flutter-autoroll@skia.org Roll Skia from 075fbe4778d9 to 6137414bef5c (10 revisions) (flutter/flutter#189106)
2026-07-08 112751483+shivanshu877@users.noreply.github.com engine: warn on WASM load failure when not crossOriginIsolated (flutter/flutter#186252)
2026-07-08 engine-flutter-autoroll@skia.org Roll Dart SDK from c9bccc09e733 to db2155f56bf3 (2 revisions) (flutter/flutter#189105)
2026-07-08 bkonyi@google.com [flutter_tools] Prevent interactive device selection in machine mode (flutter/flutter#188267)
2026-07-08 bkonyi@google.com [flutter_tools] Fix wireless ADB device discovery when serial contains spaces (flutter/flutter#187943)
2026-07-07 zhongliu88889@gmail.com [web] Fix grouped autofill on iOS Chrome (flutter/flutter#187459)
2026-07-07 rmolivares@renzo-olivares.dev Fix TextSelectionOverlay crash when layout is degenerate (flutter/flutter#188672)
2026-07-07 87962825+kyungilcho@users.noreply.github.com [flutter_tools] Provision Android NDK in the main Gradle invocation (flutter/flutter#186337)
2026-07-07 awolff@google.com Android_hardware_smoke_test: Migrate to AGP 9 (flutter/flutter#189082)
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD tool Affects the "flutter" command-line tool. See also t: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[tool_crash] FileSystemException: Failed to decode data using encoding 'utf-8', null

4 participants