summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOwen Lin <owenlin@android.com>2012-08-10 01:22:12 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-08-10 01:22:13 -0700
commitb6f5404c42bdba2a7e9c695362e2e623fb2eff46 (patch)
tree3395aa0b0a1196f4bd10402fab7330537c097556 /src
parentfdc13c38bed810979fbed5629e2bf53b5c10470e (diff)
parent441606c1291d4042c298862683d268521bb881d6 (diff)
downloadandroid_packages_apps_Snap-b6f5404c42bdba2a7e9c695362e2e623fb2eff46.tar.gz
android_packages_apps_Snap-b6f5404c42bdba2a7e9c695362e2e623fb2eff46.tar.bz2
android_packages_apps_Snap-b6f5404c42bdba2a7e9c695362e2e623fb2eff46.zip
Merge "Fix ExifParser bug when APP0 exists in Jpeg file" into gb-ub-photos-arches
Diffstat (limited to 'src')
-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;
}