Merge "Fix NPE caused by invalid IFD0 offset" am: d3ea4ec384

Change-Id: I17436200d52434a15290ea88d03802609cda52af
This commit is contained in:
Automerger Merge Worker
2020-02-06 21:00:09 +00:00

View File

@@ -224,8 +224,8 @@ public class ExifParser {
mIfdType = IfdId.TYPE_IFD_0; mIfdType = IfdId.TYPE_IFD_0;
if (isIfdRequested(IfdId.TYPE_IFD_0) || needToParseOffsetsInCurrentIfd()) { if (isIfdRequested(IfdId.TYPE_IFD_0) || needToParseOffsetsInCurrentIfd()) {
registerIfd(IfdId.TYPE_IFD_0, offset); registerIfd(IfdId.TYPE_IFD_0, offset);
if (offset != DEFAULT_IFD0_OFFSET) { if (mIfd0Position > DEFAULT_IFD0_OFFSET) {
mDataAboveIfd0 = new byte[(int) offset - DEFAULT_IFD0_OFFSET]; mDataAboveIfd0 = new byte[mIfd0Position - DEFAULT_IFD0_OFFSET];
read(mDataAboveIfd0); read(mDataAboveIfd0);
} }
} }
@@ -558,7 +558,9 @@ public class ExifParser {
} }
// Some invalid images put some undefined data before IFD0. // Some invalid images put some undefined data before IFD0.
// Read the data here. // 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]; byte[] buf = new byte[(int) numOfComp];
System.arraycopy(mDataAboveIfd0, (int) offset - DEFAULT_IFD0_OFFSET, System.arraycopy(mDataAboveIfd0, (int) offset - DEFAULT_IFD0_OFFSET,
buf, 0, (int) numOfComp); buf, 0, (int) numOfComp);