Skip to content

Commit 64b7176

Browse files
authored
Merge pull request #470 from normana10/master
ItemInfoBox no longer throws exception when no content encoding is present
2 parents f65e53a + f587113 commit 64b7176

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

Source/com/drew/metadata/heif/boxes/ItemInfoBox.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,16 @@ public ItemInfoEntry(SequentialReader reader, Box box) throws IOException
6969
{
7070
super(reader, box);
7171

72+
// 4 Bytes for length, 4 Bytes for type. Reader is indexed from AFTER type but box.size INCLUDES the aforementioned 8 bytes
73+
int headerLength = 8;
74+
7275
if ((version == 0) || (version == 1)) {
7376
itemID = reader.getUInt16();
7477
itemProtectionIndex = reader.getUInt16();
75-
itemName = reader.getNullTerminatedString((int)(box.size - reader.getPosition()), Charsets.UTF_8);
76-
contentType = reader.getNullTerminatedString((int)(box.size - reader.getPosition()), Charsets.UTF_8);
77-
if (box.size - reader.getPosition() > 0) {
78-
extensionType = reader.getNullTerminatedString((int) (box.size - reader.getPosition()), Charsets.UTF_8);
78+
itemName = reader.getNullTerminatedString((int)(box.size - reader.getPosition() - headerLength), Charsets.UTF_8);
79+
contentType = reader.getNullTerminatedString((int)(box.size - reader.getPosition() - headerLength), Charsets.UTF_8);
80+
if (box.size - reader.getPosition() - headerLength > 0) {
81+
extensionType = reader.getNullTerminatedString((int) (box.size - reader.getPosition() - headerLength), Charsets.UTF_8);
7982
}
8083
}
8184
if (version == 1) {
@@ -92,14 +95,14 @@ public ItemInfoEntry(SequentialReader reader, Box box) throws IOException
9295
itemProtectionIndex = reader.getUInt16();
9396
itemType = reader.getString(4);
9497

95-
itemName = reader.getNullTerminatedString((int)(box.size - reader.getPosition()), Charsets.UTF_8);
98+
itemName = reader.getNullTerminatedString((int)(box.size - reader.getPosition() - headerLength), Charsets.UTF_8);
9699
if (itemType.equals("mime")) {
97-
contentType = reader.getNullTerminatedString((int)(box.size - reader.getPosition()), Charsets.UTF_8);
98-
if (box.size - reader.getPosition() > 0) {
99-
contentEncoding = reader.getNullTerminatedString((int)(box.size - reader.getPosition()), Charsets.UTF_8);
100+
contentType = reader.getNullTerminatedString((int)(box.size - reader.getPosition() - headerLength), Charsets.UTF_8);
101+
if (box.size - reader.getPosition() - headerLength > 0) {
102+
contentEncoding = reader.getNullTerminatedString((int)(box.size - reader.getPosition() - headerLength), Charsets.UTF_8);
100103
}
101104
} else if (itemType.equals("uri ")) {
102-
itemUriType = reader.getString((int)(box.size - reader.getPosition()));
105+
itemUriType = reader.getString((int)(box.size - reader.getPosition() - headerLength));
103106
}
104107
}
105108
}

0 commit comments

Comments
 (0)