diff options
author | Earl Ou <shunhsingou@google.com> | 2012-10-19 23:27:44 +0800 |
---|---|---|
committer | Earl Ou <shunhsingou@google.com> | 2012-11-07 11:22:21 +0800 |
commit | c188a0d5d2a8cfa4237daf4a94adce31f77151e4 (patch) | |
tree | 0736019a9ec273c31b2448cf1606b3411c885a29 /gallerycommon/src/com/android/gallery3d/exif/ExifReader.java | |
parent | 24bc9e24af37b2d0564a2503e32910b8ff82b96b (diff) | |
download | android_packages_apps_Snap-c188a0d5d2a8cfa4237daf4a94adce31f77151e4.tar.gz android_packages_apps_Snap-c188a0d5d2a8cfa4237daf4a94adce31f77151e4.tar.bz2 android_packages_apps_Snap-c188a0d5d2a8cfa4237daf4a94adce31f77151e4.zip |
Handle invalid offset value in ExifParser
Change-Id: I6d4a0edec361f8359535761d7f12ab9363ff1ad1
Diffstat (limited to 'gallerycommon/src/com/android/gallery3d/exif/ExifReader.java')
-rw-r--r-- | gallerycommon/src/com/android/gallery3d/exif/ExifReader.java | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/gallerycommon/src/com/android/gallery3d/exif/ExifReader.java b/gallerycommon/src/com/android/gallery3d/exif/ExifReader.java index d8083b2dd..5bce9c496 100644 --- a/gallerycommon/src/com/android/gallery3d/exif/ExifReader.java +++ b/gallerycommon/src/com/android/gallery3d/exif/ExifReader.java @@ -16,6 +16,8 @@ package com.android.gallery3d.exif; +import android.util.Log; + import java.io.IOException; import java.io.InputStream; @@ -23,6 +25,7 @@ import java.io.InputStream; * This class reads the EXIF header of a JPEG file and stores it in {@link ExifData}. */ public class ExifReader { + private static final String TAG = "ExifReader"; /** * Parses the inputStream and and returns the EXIF data in an {@link ExifData}. * @throws ExifInvalidFormatException @@ -50,25 +53,28 @@ public class ExifReader { case ExifParser.EVENT_VALUE_OF_REGISTERED_TAG: tag = parser.getTag(); if (tag.getDataType() == ExifTag.TYPE_UNDEFINED) { - byte[] buf = new byte[tag.getComponentCount()]; - parser.read(buf); - tag.setValue(buf); + parser.readFullTagValue(tag); } exifData.getIfdData(tag.getIfd()).setTag(tag); break; case ExifParser.EVENT_COMPRESSED_IMAGE: byte buf[] = new byte[parser.getCompressedImageSize()]; - parser.read(buf); - exifData.setCompressedThumbnail(buf); + if (buf.length == parser.read(buf)) { + exifData.setCompressedThumbnail(buf); + } else { + Log.w(TAG, "Failed to read the compressed thumbnail"); + } break; case ExifParser.EVENT_UNCOMPRESSED_STRIP: buf = new byte[parser.getStripSize()]; - parser.read(buf); - exifData.setStripBytes(parser.getStripIndex(), buf); + if (buf.length == parser.read(buf)) { + exifData.setStripBytes(parser.getStripIndex(), buf); + Log.w(TAG, "Failed to read the strip bytes"); + } break; } event = parser.next(); } return exifData; } -}
\ No newline at end of file +} |