Merge "ExifInterface: fix NegativeArraySizeException" am: c57b472d67
am: 582e612fdc
Change-Id: I671ef98f05431e7c4baa2a7b84f6cb04a82c5d9d
This commit is contained in:
@@ -2198,21 +2198,28 @@ public class ExifInterface {
|
|||||||
dataFormat, numberOfComponents));
|
dataFormat, numberOfComponents));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tag == null || dataFormat <= 0 ||
|
long byteCount = 0;
|
||||||
dataFormat >= IFD_FORMAT_BYTES_PER_FORMAT.length) {
|
boolean valid = false;
|
||||||
// Skip if the parsed tag number is not defined or invalid data format.
|
if (tag == null) {
|
||||||
if (tag == null) {
|
Log.w(TAG, "Skip the tag entry since tag number is not defined: " + tagNumber);
|
||||||
Log.w(TAG, "Skip the tag entry since tag number is not defined: " + tagNumber);
|
} else if (dataFormat <= 0 || dataFormat >= IFD_FORMAT_BYTES_PER_FORMAT.length) {
|
||||||
|
Log.w(TAG, "Skip the tag entry since data format is invalid: " + dataFormat);
|
||||||
|
} else {
|
||||||
|
byteCount = (long) numberOfComponents * IFD_FORMAT_BYTES_PER_FORMAT[dataFormat];
|
||||||
|
if (byteCount < 0 || byteCount > Integer.MAX_VALUE) {
|
||||||
|
Log.w(TAG, "Skip the tag entry since number of components is invalid: "
|
||||||
|
+ numberOfComponents);
|
||||||
} else {
|
} else {
|
||||||
Log.w(TAG, "Skip the tag entry since data format is invalid: " + dataFormat);
|
valid = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (!valid) {
|
||||||
dataInputStream.seek(nextEntryOffset);
|
dataInputStream.seek(nextEntryOffset);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read a value from data field or seek to the value offset which is stored in data
|
// Read a value from data field or seek to the value offset which is stored in data
|
||||||
// field if the size of the entry value is bigger than 4.
|
// field if the size of the entry value is bigger than 4.
|
||||||
int byteCount = numberOfComponents * IFD_FORMAT_BYTES_PER_FORMAT[dataFormat];
|
|
||||||
if (byteCount > 4) {
|
if (byteCount > 4) {
|
||||||
long offset = dataInputStream.readUnsignedInt();
|
long offset = dataInputStream.readUnsignedInt();
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
|
|||||||
Reference in New Issue
Block a user