From 710fe2f2aee15ee09956e24c752fc5ed3376a8cf Mon Sep 17 00:00:00 2001 From: Taesu Lee Date: Mon, 8 May 2017 11:21:40 +0900 Subject: [PATCH] Fix NPE caused by invalid IFD0 offset NPE occurs when current IFD0 offset is smaller than default IFD offset. Just skip invalid tag instead. Test: Manual Change-Id: I184794e7ee227849da7d2ecf3cf647e69dc91610 Signed-off-by: Taesu Lee --- src/com/android/messaging/util/exif/ExifParser.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/com/android/messaging/util/exif/ExifParser.java b/src/com/android/messaging/util/exif/ExifParser.java index 4b6cf68..46f253e 100644 --- a/src/com/android/messaging/util/exif/ExifParser.java +++ b/src/com/android/messaging/util/exif/ExifParser.java @@ -224,8 +224,8 @@ public class ExifParser { mIfdType = IfdId.TYPE_IFD_0; if (isIfdRequested(IfdId.TYPE_IFD_0) || needToParseOffsetsInCurrentIfd()) { registerIfd(IfdId.TYPE_IFD_0, offset); - if (offset != DEFAULT_IFD0_OFFSET) { - mDataAboveIfd0 = new byte[(int) offset - DEFAULT_IFD0_OFFSET]; + if (mIfd0Position > DEFAULT_IFD0_OFFSET) { + mDataAboveIfd0 = new byte[mIfd0Position - DEFAULT_IFD0_OFFSET]; read(mDataAboveIfd0); } } @@ -558,7 +558,9 @@ public class ExifParser { } // Some invalid images put some undefined data before IFD0. // Read the data here. - if ((offset < mIfd0Position) && (dataFormat == ExifTag.TYPE_UNDEFINED)) { + if (mDataAboveIfd0 != null + && offset < mIfd0Position + && dataFormat == ExifTag.TYPE_UNDEFINED) { byte[] buf = new byte[(int) numOfComp]; System.arraycopy(mDataAboveIfd0, (int) offset - DEFAULT_IFD0_OFFSET, buf, 0, (int) numOfComp);