From d97df402b82d5fdd8cce1be6e51c9e5067053dda Mon Sep 17 00:00:00 2001 From: Adam Barth Date: Tue, 24 May 2016 16:53:14 -0700 Subject: [PATCH] ImageCache should handle images that fail to decode (#4118) --- .../flutter/lib/src/services/image_cache.dart | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/flutter/lib/src/services/image_cache.dart b/packages/flutter/lib/src/services/image_cache.dart index f0ae82fadf..a341ea57cd 100644 --- a/packages/flutter/lib/src/services/image_cache.dart +++ b/packages/flutter/lib/src/services/image_cache.dart @@ -4,10 +4,11 @@ import 'dart:async'; import 'dart:collection'; -import 'dart:ui' show hashValues; +import 'dart:ui' show hashValues, Image; import 'package:flutter/foundation.dart'; import 'package:flutter/http.dart' as http; +import 'package:mojo/core.dart' as mojo; import 'image_decoder.dart'; import 'image_resource.dart'; @@ -53,10 +54,14 @@ class _UrlFetcher implements ImageProvider { @override Future loadImage() async { try { - return new ImageInfo( - image: await decodeImageFromDataPipe(await http.readDataPipe(Uri.base.resolve(_url))), - scale: _scale - ); + final Uri resolvedUrl = Uri.base.resolve(_url); + final mojo.MojoDataPipeConsumer dataPipe = await http.readDataPipe(resolvedUrl); + if (dataPipe == null) + throw 'Unable to read data from: $resolvedUrl'; + final Image image = await decodeImageFromDataPipe(dataPipe); + if (image == null) + throw 'Unable to decode image data from: $resolvedUrl'; + return new ImageInfo(image: image, scale: _scale); } catch (exception, stack) { FlutterError.reportError(new FlutterErrorDetails( exception: exception,