summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEarl Ou <shunhsingou@google.com>2012-08-07 19:15:31 +0800
committerEarl Ou <shunhsingou@google.com>2012-08-08 15:20:34 +0800
commit441606c1291d4042c298862683d268521bb881d6 (patch)
tree800a7903ce35b264ede7a92a780ed917a1cc5d8e
parent3fda31aa8d78ba7d4d323a6c111fb4bb33288573 (diff)
downloadandroid_packages_apps_Snap-441606c1291d4042c298862683d268521bb881d6.tar.gz
android_packages_apps_Snap-441606c1291d4042c298862683d268521bb881d6.tar.bz2
android_packages_apps_Snap-441606c1291d4042c298862683d268521bb881d6.zip
Fix ExifParser bug when APP0 exists in Jpeg file
Change-Id: If5843757e00bc12bc50003eef3d78b9c3cedf69e
-rw-r--r--src/com/android/gallery3d/exif/ExifParser.java13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/com/android/gallery3d/exif/ExifParser.java b/src/com/android/gallery3d/exif/ExifParser.java
index 534f2f6d9..f536a55f4 100644
--- a/src/com/android/gallery3d/exif/ExifParser.java
+++ b/src/com/android/gallery3d/exif/ExifParser.java
@@ -17,6 +17,7 @@
package com.android.gallery3d.exif;
import java.io.DataInputStream;
+import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteOrder;
@@ -27,6 +28,7 @@ public class ExifParser {
private static final short SOI = (short) 0xFFD8; // SOI marker of JPEG
private static final short APP1 = (short) 0xFFE1; // APP1 marker of JPEG
+ private static final short APP0 = (short) 0xFFE0; // APP0 marder of JPEG
private static final int EXIF_HEADER = 0x45786966; // EXIF header "Exif"
private static final short EXIF_HEADER_TAIL = (short) 0x0000; // EXIF header in APP1
@@ -79,7 +81,16 @@ public class ExifParser {
throw new ExifInvalidFormatException("Invalid JPEG format");
}
- if (dataStream.readShort() != APP1) {
+ short tag = dataStream.readShort();
+ if (tag == APP0) {
+ int length = dataStream.readUnsignedShort();
+ if ((length - 2) != dataStream.skip(length - 2)) {
+ throw new EOFException();
+ }
+ tag = dataStream.readShort();
+ }
+
+ if (tag != APP1) {
return false;
}