Skip to content

Commit 061df50

Browse files
committed
keyTXTChunk improvement
1 parent c19425f commit 061df50

File tree

2 files changed

+10
-12
lines changed

2 files changed

+10
-12
lines changed

src/pngchunk_int.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -107,20 +107,18 @@ namespace Exiv2 {
107107
const int offset = stripHeader ? 8 : 0;
108108
if (data.size() <= offset)
109109
throw Error(kerFailedToReadImageData);
110-
const byte *key = data.c_data(offset);
111110

112-
// Find null chatecter at end of keyword.
113-
int keysize=0;
114-
while (key[keysize] != 0)
115-
{
116-
keysize++;
117-
// look if keysize is valid.
118-
if (keysize+offset >= data.size())
119-
throw Error(kerFailedToReadImageData);
120-
/// \todo move conditional out of the loop
111+
// Search for null char until the end of the DataBuf
112+
const byte* dataPtr = data.c_data();
113+
int keysize=offset;
114+
while (dataPtr[keysize] != 0 && keysize < data.size()) {
115+
keysize++;
121116
}
122117

123-
return DataBuf(key, keysize);
118+
if (keysize == data.size())
119+
throw Error(kerFailedToReadImageData);
120+
121+
return DataBuf(dataPtr+offset, keysize-offset);
124122
}
125123

126124
DataBuf PngChunk::parseTXTChunk(const DataBuf& data,

unitTests/test_pngimage.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ TEST(PngChunk, keyTxtChunkExtractsKeywordCorrectlyInPresenceOfNullChar)
3939
DataBuf key = Internal::PngChunk::keyTXTChunk(chunkBuf, true);
4040
ASSERT_EQ(21, key.size());
4141

42-
ASSERT_TRUE(std::equal(key.data(), key.data()+key.size(), data.data()+8, data.data()+8+key.size()));
42+
ASSERT_TRUE(std::equal(key.data(), key.data()+key.size(), data.data()+8));
4343
}
4444

4545

0 commit comments

Comments
 (0)