Merge "Fix NPE caused by invalid IFD0 offset"
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user