Skip to content

Commit 2930e20

Browse files
authored
[vector_graphics]Add Null Check for Image Retrieval in listener.dart's onDrawImage Function (flutter#9211)
This PR adds error handling for [flutter#168364](flutter#168364) ## Pre-Review Checklist
1 parent e8dcbd9 commit 2930e20

4 files changed

Lines changed: 22 additions & 4 deletions

File tree

packages/vector_graphics/CHANGELOG.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
## NEXT
1+
## 1.1.19
22

3-
* Updates minimum supported SDK version to Flutter 3.27/Dart 3.6.
3+
* Updates minimum supported SDK version to Flutter 3.24/Dart 3.5.
4+
* Enhance image handling by adding validity checks and clear error messages for improved robustness and maintainability.
45

56
## 1.1.18
67

packages/vector_graphics/lib/src/listener.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,12 @@ class FlutterVectorGraphicsListener extends VectorGraphicsCodecListener {
773773
@override
774774
void onDrawImage(int imageId, double x, double y, double width, double height,
775775
Float64List? transform) {
776-
final Image image = _images[imageId]!;
776+
final Image? image = _images[imageId];
777+
assert(image != null,
778+
'Invalid imageId: $imageId. Image not found in _images.');
779+
if (image == null) {
780+
return;
781+
}
777782
if (transform != null) {
778783
_canvas.save();
779784
_canvas.transform(transform);

packages/vector_graphics/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: vector_graphics
22
description: A vector graphics rendering package for Flutter using a binary encoding.
33
repository: https://github.com/flutter/packages/tree/main/packages/vector_graphics
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+vector_graphics%22
5-
version: 1.1.18
5+
version: 1.1.19
66

77
environment:
88
sdk: ^3.6.0

packages/vector_graphics/test/listener_test.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,18 @@ void main() {
144144
expect(drawParagraph1.memberName, #drawParagraph);
145145
expect((drawParagraph1.positionalArguments[1] as Offset).dx, 58);
146146
});
147+
148+
test('should assert when imageId is invalid', () async {
149+
final TestPictureFactory factory = TestPictureFactory();
150+
final FlutterVectorGraphicsListener listener =
151+
FlutterVectorGraphicsListener(
152+
pictureFactory: factory,
153+
);
154+
listener.onImage(0, 0, base64.decode(bluePngPixel));
155+
await listener.waitForImageDecode();
156+
expect(() => listener.onDrawImage(2, 10, 10, 100, 100, null),
157+
throwsAssertionError);
158+
});
147159
}
148160

149161
class TestPictureFactory implements PictureFactory {

0 commit comments

Comments
 (0)