summaryrefslogtreecommitdiffstats
path: root/gallerycommon/src/com/android/gallery3d/exif/ExifReader.java
diff options
context:
space:
mode:
authorEarl Ou <shunhsingou@google.com>2012-10-19 23:27:44 +0800
committerEarl Ou <shunhsingou@google.com>2012-11-07 11:22:21 +0800
commitc188a0d5d2a8cfa4237daf4a94adce31f77151e4 (patch)
tree0736019a9ec273c31b2448cf1606b3411c885a29 /gallerycommon/src/com/android/gallery3d/exif/ExifReader.java
parent24bc9e24af37b2d0564a2503e32910b8ff82b96b (diff)
downloadandroid_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.java22
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
+}