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); + } }