Skip to content

Conversation

@bshishov
Copy link
Contributor

@bshishov bshishov commented Aug 27, 2025

Fixes buffer access when loading svg from assets. Making it consistent with Image.asset loading.

Basically changes:
String provideSvg(ByteData? message) => utf8.decode(message!.buffer.asUint8List(), allowMalformed: true);
to:
String provideSvg(ByteData? message) =>utf8.decode(Uint8List.sublistView(message!));

since we do not want to decode whole buffer.
This is useful when using custom AssetBundles, like when they provide as slice of buffer on load() instead of allocating a new array of bytes.

Fixes flutter/flutter#174526

Pre-Review 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-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.

Footnotes

  1. Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. 2 3

@bshishov bshishov changed the title Flutter svg loader buffer fix [flutter_svg] loader buffer fix Aug 27, 2025
Copy link

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

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 provides a crucial fix for an issue in SvgAssetLoader where it was incorrectly decoding the entire underlying buffer of a ByteData object instead of the intended slice. The change correctly uses Uint8List.sublistView to respect the ByteData's view, which is essential for custom AssetBundle implementations that return buffer slices. The fix is well-supported by a new, targeted test case that validates the corrected behavior. The necessary version and changelog updates are also included. Overall, this is a well-executed and important bug fix.

bshishov and others added 4 commits August 27, 2025 19:11
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
@stuartmorgan-g stuartmorgan-g added the autosubmit Merge PR when tree becomes green via auto submit App label Sep 3, 2025
@auto-submit auto-submit bot merged commit af2764c into flutter:main Sep 3, 2025
80 checks passed
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Sep 4, 2025
github-merge-queue bot pushed a commit to flutter/flutter that referenced this pull request Sep 4, 2025
flutter/packages@42bb347...98580c6

2025-09-04 [email protected] [mustache_template] Initial import
(flutter/packages#9944)
2025-09-04 [email protected]
[google_maps_flutter_web] Omit styles when cloudMapId is set
(flutter/packages#9869)
2025-09-03 [email protected] [go_router_builder] Fix unnecessary
whitespace in generated `RelativeGoRouteData` (flutter/packages#9875)
2025-09-03 [email protected] [google_maps_flutter_web] Stop
listening to map events when disposed (flutter/packages#9250)
2025-09-03 [email protected] [flutter_svg] loader buffer fix
(flutter/packages#9898)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC [email protected] on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
mboetger pushed a commit to mboetger/flutter that referenced this pull request Sep 18, 2025
flutter/packages@42bb347...98580c6

2025-09-04 [email protected] [mustache_template] Initial import
(flutter/packages#9944)
2025-09-04 [email protected]
[google_maps_flutter_web] Omit styles when cloudMapId is set
(flutter/packages#9869)
2025-09-03 [email protected] [go_router_builder] Fix unnecessary
whitespace in generated `RelativeGoRouteData` (flutter/packages#9875)
2025-09-03 [email protected] [google_maps_flutter_web] Stop
listening to map events when disposed (flutter/packages#9250)
2025-09-03 [email protected] [flutter_svg] loader buffer fix
(flutter/packages#9898)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC [email protected] on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Jaineel-Mamtora pushed a commit to Jaineel-Mamtora/flutter_forked that referenced this pull request Sep 24, 2025
flutter/packages@42bb347...98580c6

2025-09-04 [email protected] [mustache_template] Initial import
(flutter/packages#9944)
2025-09-04 [email protected]
[google_maps_flutter_web] Omit styles when cloudMapId is set
(flutter/packages#9869)
2025-09-03 [email protected] [go_router_builder] Fix unnecessary
whitespace in generated `RelativeGoRouteData` (flutter/packages#9875)
2025-09-03 [email protected] [google_maps_flutter_web] Stop
listening to map events when disposed (flutter/packages#9250)
2025-09-03 [email protected] [flutter_svg] loader buffer fix
(flutter/packages#9898)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC [email protected] on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
lucaantonelli pushed a commit to lucaantonelli/flutter that referenced this pull request Nov 21, 2025
flutter/packages@42bb347...98580c6

2025-09-04 [email protected] [mustache_template] Initial import
(flutter/packages#9944)
2025-09-04 [email protected]
[google_maps_flutter_web] Omit styles when cloudMapId is set
(flutter/packages#9869)
2025-09-03 [email protected] [go_router_builder] Fix unnecessary
whitespace in generated `RelativeGoRouteData` (flutter/packages#9875)
2025-09-03 [email protected] [google_maps_flutter_web] Stop
listening to map events when disposed (flutter/packages#9250)
2025-09-03 [email protected] [flutter_svg] loader buffer fix
(flutter/packages#9898)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC [email protected] on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autosubmit Merge PR when tree becomes green via auto submit App p: flutter_svg

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[flutter_svg] Incorrectly loads SVG assets assuming each svg-image has a separate buffer underliing.

3 participants