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
commit0490334cba2583a3690b8c58377394689f778ec9 (patch)
treecb996ec7745a4799929b03bf99fae3d2199e8446 /gallerycommon/src/com/android/gallery3d/exif/ExifReader.java
parent21f52a50d6b325c9cf86bccbbc05441fb2ba4d36 (diff)
downloadandroid_packages_apps_Snap-0490334cba2583a3690b8c58377394689f778ec9.tar.gz
android_packages_apps_Snap-0490334cba2583a3690b8c58377394689f778ec9.tar.bz2
android_packages_apps_Snap-0490334cba2583a3690b8c58377394689f778ec9.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
+}