diff options
author | Earl Ou <shunhsingou@google.com> | 2012-08-07 19:15:31 +0800 |
---|---|---|
committer | Earl Ou <shunhsingou@google.com> | 2012-08-08 15:20:34 +0800 |
commit | 441606c1291d4042c298862683d268521bb881d6 (patch) | |
tree | 800a7903ce35b264ede7a92a780ed917a1cc5d8e | |
parent | 3fda31aa8d78ba7d4d323a6c111fb4bb33288573 (diff) | |
download | android_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.java | 13 |
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; } |