diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java
index 3fa078f51ac7c..dff466f17cfb9 100644
--- a/media/java/android/media/ExifInterface.java
+++ b/media/java/android/media/ExifInterface.java
@@ -1560,8 +1560,6 @@ public class ExifInterface {
StringBuilder stringBuilder = new StringBuilder();
while (true) {
int ch = bytes[index];
- if (ch < 0)
- throw new EOFException();
if (ch == 0)
break;
if (ch >= 32)
diff --git a/media/tests/MediaFrameworkTest/assets/volantis.jpg b/media/tests/MediaFrameworkTest/assets/volantis.jpg
new file mode 100644
index 0000000000000..cfe300f4eafcd
Binary files /dev/null and b/media/tests/MediaFrameworkTest/assets/volantis.jpg differ
diff --git a/media/tests/MediaFrameworkTest/res/raw/volantis.jpg b/media/tests/MediaFrameworkTest/res/raw/volantis.jpg
new file mode 100644
index 0000000000000..cfe300f4eafcd
Binary files /dev/null and b/media/tests/MediaFrameworkTest/res/raw/volantis.jpg differ
diff --git a/media/tests/MediaFrameworkTest/res/values/exifinterface.xml b/media/tests/MediaFrameworkTest/res/values/exifinterface.xml
index eb13ff37632b9..d556ad33c04ac 100644
--- a/media/tests/MediaFrameworkTest/res/values/exifinterface.xml
+++ b/media/tests/MediaFrameworkTest/res/values/exifinterface.xml
@@ -105,4 +105,34 @@
- 1
+
+ - false
+ - 0
+ - 0
+ - true
+ - 37.423
+ - -122.162
+ - 0.0
+ - htc
+ - Nexus 9
+ - 1.2904
+ - 2016:03:09 17:36:42
+ - 0.0083
+ - 64
+ - 3097/1000
+
+
+ - 2016:03:09
+ - 37/1,25/1,2291/100
+ - N
+ - 122/1,9/1,4330/100
+ - W
+
+ - 08:35:34
+ - 720
+ - 1280
+ - 175
+ - 1
+ - 0
+
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/ExifInterfaceTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/ExifInterfaceTest.java
index cff18cf6da0f8..5bd607922c813 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/ExifInterfaceTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/ExifInterfaceTest.java
@@ -51,10 +51,12 @@ public class ExifInterfaceTest extends AndroidTestCase {
private static final String EXIF_BYTE_ORDER_II_JPEG = "image_exif_byte_order_ii.jpg";
private static final String EXIF_BYTE_ORDER_MM_JPEG = "image_exif_byte_order_mm.jpg";
private static final String LG_G4_ISO_800_DNG = "lg_g4_iso_800.dng";
+ private static final String VOLANTIS_JPEG = "volantis.jpg";
private static final int[] IMAGE_RESOURCES = new int[] {
- R.raw.image_exif_byte_order_ii, R.raw.image_exif_byte_order_mm, R.raw.lg_g4_iso_800 };
+ R.raw.image_exif_byte_order_ii, R.raw.image_exif_byte_order_mm, R.raw.lg_g4_iso_800,
+ R.raw.volantis };
private static final String[] IMAGE_FILENAMES = new String[] {
- EXIF_BYTE_ORDER_II_JPEG, EXIF_BYTE_ORDER_MM_JPEG, LG_G4_ISO_800_DNG };
+ EXIF_BYTE_ORDER_II_JPEG, EXIF_BYTE_ORDER_MM_JPEG, LG_G4_ISO_800_DNG, VOLANTIS_JPEG };
private static final String[] EXIF_TAGS = {
ExifInterface.TAG_MAKE,
@@ -415,7 +417,7 @@ public class ExifInterfaceTest extends AndroidTestCase {
testExifInterfaceForRaw(LG_G4_ISO_800_DNG, R.array.lg_g4_iso_800_dng);
}
- public void testCorruptedImage() {
+ public void testCorruptedImage() throws Throwable {
byte[] bytes = new byte[1024];
try {
new ExifInterface(new ByteArrayInputStream(bytes));
@@ -424,4 +426,9 @@ public class ExifInterfaceTest extends AndroidTestCase {
// Success
}
}
+
+ public void testReadExifDataFromVolantisJpg() throws Throwable {
+ // Test if it is possible to parse the volantis generated JPEG smoothly.
+ testExifInterfaceForJpeg(VOLANTIS_JPEG, R.array.volantis_jpg);
+ }
}