Repository navigation
[web] Fix stack corruption in Skwasm and harden withStackScope API - #182912
Conversation
This PR fixes a critical memory crash in Skwasm that occurs after a consistent number of frames (e.g. 3863). The root cause was the incorrect usage of `withStackScope` with an `async` closure in `SkwasmSurface.rasterizeToImageBitmaps`. Because `withStackScope` restores the WASM linear memory stack immediately after the closure returns, any asynchronous yields (waits) inside the closure would cause the stack to be reclaimed while the closure was still potentially using pointers to that memory. Changes: - Fixed `SkwasmSurface.rasterizeToImageBitmaps` to use a synchronous closure and handle initialization outside the stack scope. - Hardened `withStackScope` to throw a `StateError` at runtime if the provided closure returns a `Future`, preventing this class of bug from reoccurring. - Added a dedicated test suite in `web_ui/test/skwasm/raw_memory_test.dart` to verify the safety check. - Configured `felt` to properly isolate and run these Skwasm-specific tests.
There was a problem hiding this comment.
Code Review
This pull request addresses a memory corruption issue in Skwasm. The withStackScope function has been modified to throw a StateError if its closure argument returns a Future, preventing its use with async functions. Consequently, the SkwasmSurface.rasterizeToImageBitmaps method was refactored to ensure that withStackScope is called with a synchronous closure, moving await calls outside of its scope. A new test file, raw_memory_test.dart, has been added to verify that withStackScope correctly throws an error for asynchronous closures and works as expected for synchronous ones. Test configurations in felt_config.yaml have been updated to include this new test suite.
|
autosubmit label was removed for flutter/flutter/182912, because - The status or check suite Mac clangd has failed. Please fix the issues identified (or deflake) before re-applying this label. |
|
autosubmit label was removed for flutter/flutter/182912, because - The status or check suite Google testing has failed. Please fix the issues identified (or deflake) before re-applying this label. |
eyebrowsoffire
left a comment
There was a problem hiding this comment.
You probably need to run felt generate-builder-json for the new suites in felt_config.yaml to actually be run in CI
Done |
|
Thanks! PTAL @eyebrowsoffire |
…lutter#182912) This PR fixes a critical memory crash in Skwasm. The root cause was the incorrect usage of `withStackScope` with an `async` closure in `SkwasmSurface.rasterizeToImageBitmaps`. Because `withStackScope` restores the WASM linear memory stack immediately after the closure returns, any asynchronous yields (waits) inside the closure would cause the stack to be reclaimed while the closure was still potentially using pointers to that memory. Changes: - Fixed `SkwasmSurface.rasterizeToImageBitmaps` to use a synchronous closure and handle initialization outside the stack scope. - Hardened `withStackScope` to throw a `StateError` at runtime if the provided closure returns a `Future`, preventing this class of bug from reoccurring. - Added a dedicated test suite in `web_ui/test/skwasm/raw_memory_test.dart` to verify the safety check. Fixes flutter#182367 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
Roll Flutter from b31548feb941 to 1141b2bdce66 (56 revisions) flutter/flutter@b31548f...1141b2b 2026-02-27 [email protected] flutter#182361 Fix delegate copy on plugins init (flutter/flutter#182362) 2026-02-27 [email protected] Roll Dart SDK from 8b036b3e63cb to 1cdb7dfd913e (1 revision) (flutter/flutter#183004) 2026-02-27 [email protected] Manual roll Dart SDK to 3.12.0-192.0.dev (flutter/flutter#182883) 2026-02-27 [email protected] Roll Skia from e2062707b0c0 to ed220c490eea (1 revision) (flutter/flutter#182992) 2026-02-27 [email protected] Roll Skia from e5aa1ab5c59c to e2062707b0c0 (3 revisions) (flutter/flutter#182989) 2026-02-27 [email protected] Linux build hooks: Read compiler config from CMakeCache.txt (flutter/flutter#181004) 2026-02-27 [email protected] Roll ICU from a86a32e67b8d to 7971660ba630 (3 revisions) (flutter/flutter#182986) 2026-02-27 [email protected] Roll Skia from 49c2de95384e to e5aa1ab5c59c (2 revisions) (flutter/flutter#182980) 2026-02-27 [email protected] [Impeller] Remove shared rendering data from TextFrame (flutter/flutter#182886) 2026-02-27 [email protected] Add fl_view_new_sized_to_content() (flutter/flutter#182924) 2026-02-27 [email protected] [Shortcuts] Improve focus node debug labels (flutter/flutter#181834) 2026-02-27 [email protected] Add a cli flag for toggling HCPP use, and enable it (flutter/flutter#182516) 2026-02-27 [email protected] `SizedBox.square()` (flutter/flutter#182731) 2026-02-27 [email protected] [web] Fix stack corruption in Skwasm and harden withStackScope API (flutter/flutter#182912) 2026-02-26 [email protected] Roll zlib to 7eda07b1e067 (flutter/flutter#182692) 2026-02-26 [email protected] [ CI ] Don't crash analysis when ktlint isn't on PATH (flutter/flutter#181854) 2026-02-26 [email protected] Add calls to await `flutterDriver.waitUntilFirstFrameRasterized()` for all `android_engine_test` screenshot tests (flutter/flutter#182961) 2026-02-26 [email protected] Roll Skia from f44d7db68805 to 49c2de95384e (30 revisions) (flutter/flutter#182957) 2026-02-26 [email protected] Support sending window constraints in metrics events (flutter/flutter#182921) 2026-02-26 [email protected] Reland: remove material in context_menu_controller_test, icon_test, list_wheel_scroll_view_test, media_query_test, platform_menu_bar_test (flutter/flutter#182891) 2026-02-26 [email protected] Remove some instances of useMaterial3: true (flutter/flutter#182944) 2026-02-26 [email protected] [Impeller] Use bilinear filtering for non-uniform scaled text (flutter/flutter#182224) 2026-02-26 [email protected] Add a ResidentCompilerFactory to create ResidentCompiler instances. (flutter/flutter#182930) 2026-02-26 [email protected] Add a getter in run.dart to access use-application-binary flag. (flutter/flutter#182931) 2026-02-26 [email protected] [web] Roll Firefox to 148 (flutter/flutter#182859) 2026-02-26 [email protected] Roll Packages from acd9adb to e1d0169 (8 revisions) (flutter/flutter#182946) 2026-02-26 [email protected] Roll Fuchsia Linux SDK from XI0Ax7fbtYE4XKYAQ... to G1GwOdVt5bM7GjMSY... (flutter/flutter#182942) 2026-02-26 [email protected] Add test for WindowPositioner.toString (flutter/flutter#182906) 2026-02-26 [email protected] Remove unused function prototype (flutter/flutter#182915) 2026-02-26 [email protected] Resolve inconsistency with SchedulerBinding.scheduleTask usage recomm… (flutter/flutter#182531) 2026-02-26 [email protected] Fix false positives for hit test misses in flutter_test (flutter/flutter#180856) 2026-02-26 [email protected] Replace an instance of flutter/engine with flutter/flutter (flutter/flutter#182655) 2026-02-26 [email protected] Use null-aware elements in widgets/routes.dart (flutter/flutter#181242) 2026-02-26 [email protected] Fix typos in method names across multiple files (flutter/flutter#182584) 2026-02-26 [email protected] Fix RawAutocomplete crash when options are hidden (flutter/flutter#182785) 2026-02-26 [email protected] Describe implications of tree-status and Google Testing for PRs (flutter/flutter#182916) 2026-02-26 [email protected] Make sure that a StretchingOverscrollIndicator doesn't crash when it … (flutter/flutter#182499) 2026-02-26 [email protected] framework: Use a super-parameter in several missed cases (flutter/flutter#182580) 2026-02-25 [email protected] `WidgetStatesConstraint` as a mixin (flutter/flutter#181704) 2026-02-25 [email protected] Paint the paragraph as a single image (flutter/flutter#181206) 2026-02-25 [email protected] Remove `ExtendSelectionByPageIntent` (flutter/flutter#182642) 2026-02-25 [email protected] feat: add few required properties to test widgets app (flutter/flutter#182805) 2026-02-25 [email protected] Updates MenuAnchor to respect software keyboard (flutter/flutter#180975) 2026-02-25 [email protected] Roll ImGui to v1.92.6-docking (flutter/flutter#182799) 2026-02-25 [email protected] Roll GoogleTest to e9907112b472 (flutter/flutter#182795) 2026-02-25 [email protected] Make positionInlineChildren assert much clearer (flutter/flutter#182093) ...
…lutter#182912) This PR fixes a critical memory crash in Skwasm. The root cause was the incorrect usage of `withStackScope` with an `async` closure in `SkwasmSurface.rasterizeToImageBitmaps`. Because `withStackScope` restores the WASM linear memory stack immediately after the closure returns, any asynchronous yields (waits) inside the closure would cause the stack to be reclaimed while the closure was still potentially using pointers to that memory. Changes: - Fixed `SkwasmSurface.rasterizeToImageBitmaps` to use a synchronous closure and handle initialization outside the stack scope. - Hardened `withStackScope` to throw a `StateError` at runtime if the provided closure returns a `Future`, preventing this class of bug from reoccurring. - Added a dedicated test suite in `web_ui/test/skwasm/raw_memory_test.dart` to verify the safety check. Fixes flutter#182367 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…lutter#182912) This PR fixes a critical memory crash in Skwasm. The root cause was the incorrect usage of `withStackScope` with an `async` closure in `SkwasmSurface.rasterizeToImageBitmaps`. Because `withStackScope` restores the WASM linear memory stack immediately after the closure returns, any asynchronous yields (waits) inside the closure would cause the stack to be reclaimed while the closure was still potentially using pointers to that memory. Changes: - Fixed `SkwasmSurface.rasterizeToImageBitmaps` to use a synchronous closure and handle initialization outside the stack scope. - Hardened `withStackScope` to throw a `StateError` at runtime if the provided closure returns a `Future`, preventing this class of bug from reoccurring. - Added a dedicated test suite in `web_ui/test/skwasm/raw_memory_test.dart` to verify the safety check. Fixes flutter#182367 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…lutter#182912) This PR fixes a critical memory crash in Skwasm. The root cause was the incorrect usage of `withStackScope` with an `async` closure in `SkwasmSurface.rasterizeToImageBitmaps`. Because `withStackScope` restores the WASM linear memory stack immediately after the closure returns, any asynchronous yields (waits) inside the closure would cause the stack to be reclaimed while the closure was still potentially using pointers to that memory. Changes: - Fixed `SkwasmSurface.rasterizeToImageBitmaps` to use a synchronous closure and handle initialization outside the stack scope. - Hardened `withStackScope` to throw a `StateError` at runtime if the provided closure returns a `Future`, preventing this class of bug from reoccurring. - Added a dedicated test suite in `web_ui/test/skwasm/raw_memory_test.dart` to verify the safety check. Fixes flutter#182367 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…r#11137) Roll Flutter from b31548feb941 to 1141b2bdce66 (56 revisions) flutter/flutter@b31548f...1141b2b 2026-02-27 [email protected] flutter#182361 Fix delegate copy on plugins init (flutter/flutter#182362) 2026-02-27 [email protected] Roll Dart SDK from 8b036b3e63cb to 1cdb7dfd913e (1 revision) (flutter/flutter#183004) 2026-02-27 [email protected] Manual roll Dart SDK to 3.12.0-192.0.dev (flutter/flutter#182883) 2026-02-27 [email protected] Roll Skia from e2062707b0c0 to ed220c490eea (1 revision) (flutter/flutter#182992) 2026-02-27 [email protected] Roll Skia from e5aa1ab5c59c to e2062707b0c0 (3 revisions) (flutter/flutter#182989) 2026-02-27 [email protected] Linux build hooks: Read compiler config from CMakeCache.txt (flutter/flutter#181004) 2026-02-27 [email protected] Roll ICU from a86a32e67b8d to 7971660ba630 (3 revisions) (flutter/flutter#182986) 2026-02-27 [email protected] Roll Skia from 49c2de95384e to e5aa1ab5c59c (2 revisions) (flutter/flutter#182980) 2026-02-27 [email protected] [Impeller] Remove shared rendering data from TextFrame (flutter/flutter#182886) 2026-02-27 [email protected] Add fl_view_new_sized_to_content() (flutter/flutter#182924) 2026-02-27 [email protected] [Shortcuts] Improve focus node debug labels (flutter/flutter#181834) 2026-02-27 [email protected] Add a cli flag for toggling HCPP use, and enable it (flutter/flutter#182516) 2026-02-27 [email protected] `SizedBox.square()` (flutter/flutter#182731) 2026-02-27 [email protected] [web] Fix stack corruption in Skwasm and harden withStackScope API (flutter/flutter#182912) 2026-02-26 [email protected] Roll zlib to 7eda07b1e067 (flutter/flutter#182692) 2026-02-26 [email protected] [ CI ] Don't crash analysis when ktlint isn't on PATH (flutter/flutter#181854) 2026-02-26 [email protected] Add calls to await `flutterDriver.waitUntilFirstFrameRasterized()` for all `android_engine_test` screenshot tests (flutter/flutter#182961) 2026-02-26 [email protected] Roll Skia from f44d7db68805 to 49c2de95384e (30 revisions) (flutter/flutter#182957) 2026-02-26 [email protected] Support sending window constraints in metrics events (flutter/flutter#182921) 2026-02-26 [email protected] Reland: remove material in context_menu_controller_test, icon_test, list_wheel_scroll_view_test, media_query_test, platform_menu_bar_test (flutter/flutter#182891) 2026-02-26 [email protected] Remove some instances of useMaterial3: true (flutter/flutter#182944) 2026-02-26 [email protected] [Impeller] Use bilinear filtering for non-uniform scaled text (flutter/flutter#182224) 2026-02-26 [email protected] Add a ResidentCompilerFactory to create ResidentCompiler instances. (flutter/flutter#182930) 2026-02-26 [email protected] Add a getter in run.dart to access use-application-binary flag. (flutter/flutter#182931) 2026-02-26 [email protected] [web] Roll Firefox to 148 (flutter/flutter#182859) 2026-02-26 [email protected] Roll Packages from acd9adb to e1d0169 (8 revisions) (flutter/flutter#182946) 2026-02-26 [email protected] Roll Fuchsia Linux SDK from XI0Ax7fbtYE4XKYAQ... to G1GwOdVt5bM7GjMSY... (flutter/flutter#182942) 2026-02-26 [email protected] Add test for WindowPositioner.toString (flutter/flutter#182906) 2026-02-26 [email protected] Remove unused function prototype (flutter/flutter#182915) 2026-02-26 [email protected] Resolve inconsistency with SchedulerBinding.scheduleTask usage recomm… (flutter/flutter#182531) 2026-02-26 [email protected] Fix false positives for hit test misses in flutter_test (flutter/flutter#180856) 2026-02-26 [email protected] Replace an instance of flutter/engine with flutter/flutter (flutter/flutter#182655) 2026-02-26 [email protected] Use null-aware elements in widgets/routes.dart (flutter/flutter#181242) 2026-02-26 [email protected] Fix typos in method names across multiple files (flutter/flutter#182584) 2026-02-26 [email protected] Fix RawAutocomplete crash when options are hidden (flutter/flutter#182785) 2026-02-26 [email protected] Describe implications of tree-status and Google Testing for PRs (flutter/flutter#182916) 2026-02-26 [email protected] Make sure that a StretchingOverscrollIndicator doesn't crash when it … (flutter/flutter#182499) 2026-02-26 [email protected] framework: Use a super-parameter in several missed cases (flutter/flutter#182580) 2026-02-25 [email protected] `WidgetStatesConstraint` as a mixin (flutter/flutter#181704) 2026-02-25 [email protected] Paint the paragraph as a single image (flutter/flutter#181206) 2026-02-25 [email protected] Remove `ExtendSelectionByPageIntent` (flutter/flutter#182642) 2026-02-25 [email protected] feat: add few required properties to test widgets app (flutter/flutter#182805) 2026-02-25 [email protected] Updates MenuAnchor to respect software keyboard (flutter/flutter#180975) 2026-02-25 [email protected] Roll ImGui to v1.92.6-docking (flutter/flutter#182799) 2026-02-25 [email protected] Roll GoogleTest to e9907112b472 (flutter/flutter#182795) 2026-02-25 [email protected] Make positionInlineChildren assert much clearer (flutter/flutter#182093) ...
…lutter#182912) This PR fixes a critical memory crash in Skwasm. The root cause was the incorrect usage of `withStackScope` with an `async` closure in `SkwasmSurface.rasterizeToImageBitmaps`. Because `withStackScope` restores the WASM linear memory stack immediately after the closure returns, any asynchronous yields (waits) inside the closure would cause the stack to be reclaimed while the closure was still potentially using pointers to that memory. Changes: - Fixed `SkwasmSurface.rasterizeToImageBitmaps` to use a synchronous closure and handle initialization outside the stack scope. - Hardened `withStackScope` to throw a `StateError` at runtime if the provided closure returns a `Future`, preventing this class of bug from reoccurring. - Added a dedicated test suite in `web_ui/test/skwasm/raw_memory_test.dart` to verify the safety check. Fixes flutter#182367 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…r#11137) Roll Flutter from b31548feb941 to 1141b2bdce66 (56 revisions) flutter/flutter@b31548f...1141b2b 2026-02-27 [email protected] flutter#182361 Fix delegate copy on plugins init (flutter/flutter#182362) 2026-02-27 [email protected] Roll Dart SDK from 8b036b3e63cb to 1cdb7dfd913e (1 revision) (flutter/flutter#183004) 2026-02-27 [email protected] Manual roll Dart SDK to 3.12.0-192.0.dev (flutter/flutter#182883) 2026-02-27 [email protected] Roll Skia from e2062707b0c0 to ed220c490eea (1 revision) (flutter/flutter#182992) 2026-02-27 [email protected] Roll Skia from e5aa1ab5c59c to e2062707b0c0 (3 revisions) (flutter/flutter#182989) 2026-02-27 [email protected] Linux build hooks: Read compiler config from CMakeCache.txt (flutter/flutter#181004) 2026-02-27 [email protected] Roll ICU from a86a32e67b8d to 7971660ba630 (3 revisions) (flutter/flutter#182986) 2026-02-27 [email protected] Roll Skia from 49c2de95384e to e5aa1ab5c59c (2 revisions) (flutter/flutter#182980) 2026-02-27 [email protected] [Impeller] Remove shared rendering data from TextFrame (flutter/flutter#182886) 2026-02-27 [email protected] Add fl_view_new_sized_to_content() (flutter/flutter#182924) 2026-02-27 [email protected] [Shortcuts] Improve focus node debug labels (flutter/flutter#181834) 2026-02-27 [email protected] Add a cli flag for toggling HCPP use, and enable it (flutter/flutter#182516) 2026-02-27 [email protected] `SizedBox.square()` (flutter/flutter#182731) 2026-02-27 [email protected] [web] Fix stack corruption in Skwasm and harden withStackScope API (flutter/flutter#182912) 2026-02-26 [email protected] Roll zlib to 7eda07b1e067 (flutter/flutter#182692) 2026-02-26 [email protected] [ CI ] Don't crash analysis when ktlint isn't on PATH (flutter/flutter#181854) 2026-02-26 [email protected] Add calls to await `flutterDriver.waitUntilFirstFrameRasterized()` for all `android_engine_test` screenshot tests (flutter/flutter#182961) 2026-02-26 [email protected] Roll Skia from f44d7db68805 to 49c2de95384e (30 revisions) (flutter/flutter#182957) 2026-02-26 [email protected] Support sending window constraints in metrics events (flutter/flutter#182921) 2026-02-26 [email protected] Reland: remove material in context_menu_controller_test, icon_test, list_wheel_scroll_view_test, media_query_test, platform_menu_bar_test (flutter/flutter#182891) 2026-02-26 [email protected] Remove some instances of useMaterial3: true (flutter/flutter#182944) 2026-02-26 [email protected] [Impeller] Use bilinear filtering for non-uniform scaled text (flutter/flutter#182224) 2026-02-26 [email protected] Add a ResidentCompilerFactory to create ResidentCompiler instances. (flutter/flutter#182930) 2026-02-26 [email protected] Add a getter in run.dart to access use-application-binary flag. (flutter/flutter#182931) 2026-02-26 [email protected] [web] Roll Firefox to 148 (flutter/flutter#182859) 2026-02-26 [email protected] Roll Packages from acd9adb to e1d0169 (8 revisions) (flutter/flutter#182946) 2026-02-26 [email protected] Roll Fuchsia Linux SDK from XI0Ax7fbtYE4XKYAQ... to G1GwOdVt5bM7GjMSY... (flutter/flutter#182942) 2026-02-26 [email protected] Add test for WindowPositioner.toString (flutter/flutter#182906) 2026-02-26 [email protected] Remove unused function prototype (flutter/flutter#182915) 2026-02-26 [email protected] Resolve inconsistency with SchedulerBinding.scheduleTask usage recomm… (flutter/flutter#182531) 2026-02-26 [email protected] Fix false positives for hit test misses in flutter_test (flutter/flutter#180856) 2026-02-26 [email protected] Replace an instance of flutter/engine with flutter/flutter (flutter/flutter#182655) 2026-02-26 [email protected] Use null-aware elements in widgets/routes.dart (flutter/flutter#181242) 2026-02-26 [email protected] Fix typos in method names across multiple files (flutter/flutter#182584) 2026-02-26 [email protected] Fix RawAutocomplete crash when options are hidden (flutter/flutter#182785) 2026-02-26 [email protected] Describe implications of tree-status and Google Testing for PRs (flutter/flutter#182916) 2026-02-26 [email protected] Make sure that a StretchingOverscrollIndicator doesn't crash when it … (flutter/flutter#182499) 2026-02-26 [email protected] framework: Use a super-parameter in several missed cases (flutter/flutter#182580) 2026-02-25 [email protected] `WidgetStatesConstraint` as a mixin (flutter/flutter#181704) 2026-02-25 [email protected] Paint the paragraph as a single image (flutter/flutter#181206) 2026-02-25 [email protected] Remove `ExtendSelectionByPageIntent` (flutter/flutter#182642) 2026-02-25 [email protected] feat: add few required properties to test widgets app (flutter/flutter#182805) 2026-02-25 [email protected] Updates MenuAnchor to respect software keyboard (flutter/flutter#180975) 2026-02-25 [email protected] Roll ImGui to v1.92.6-docking (flutter/flutter#182799) 2026-02-25 [email protected] Roll GoogleTest to e9907112b472 (flutter/flutter#182795) 2026-02-25 [email protected] Make positionInlineChildren assert much clearer (flutter/flutter#182093) ...

This PR fixes a critical memory crash in Skwasm. The root cause was the incorrect usage of
withStackScopewith anasyncclosure inSkwasmSurface.rasterizeToImageBitmaps.Because
withStackScoperestores the WASM linear memory stack immediately after the closure returns, any asynchronous yields (waits) inside the closure would cause the stack to be reclaimed while the closure was still potentially using pointers to that memory.Changes:
SkwasmSurface.rasterizeToImageBitmapsto use a synchronous closure and handle initialization outside the stack scope.withStackScopeto throw aStateErrorat runtime if the provided closure returns aFuture, preventing this class of bug from reoccurring.web_ui/test/skwasm/raw_memory_test.dartto verify the safety check.Fixes #182367
Pre-launch Checklist
///).If you need help, consider asking for advice on the #hackers-new channel on Discord.
Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the
gemini-code-assistbot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.