Skip to content

Commit

Permalink
Be more careful when parsing Vorbis Comments
Browse files Browse the repository at this point in the history
  • Loading branch information
franklai authored and lalinsky committed Jun 9, 2011
1 parent 8ed9b0d commit b3646a0
Showing 1 changed file with 13 additions and 3 deletions.
16 changes: 13 additions & 3 deletions taglib/ogg/xiphcomment.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -295,21 +295,31 @@ void Ogg::XiphComment::parse(const ByteVector &data)

// Next the number of fields in the comment vector.

int commentFields = data.mid(pos, 4).toUInt(false);
uint commentFields = data.mid(pos, 4).toUInt(false);
pos += 4;

for(int i = 0; i < commentFields; i++) {
if(commentFields > (data.size() - 8) / 4) {
return;
}

for(uint i = 0; i < commentFields; i++) {

// Each comment field is in the format "KEY=value" in a UTF8 string and has
// 4 bytes before the text starts that gives the length.

int commentLength = data.mid(pos, 4).toUInt(false);
uint commentLength = data.mid(pos, 4).toUInt(false);
pos += 4;

String comment = String(data.mid(pos, commentLength), String::UTF8);
pos += commentLength;
if(pos > data.size()) {
break;
}

int commentSeparatorPosition = comment.find("=");
if(commentSeparatorPosition == -1) {
break;
}

String key = comment.substr(0, commentSeparatorPosition);
String value = comment.substr(commentSeparatorPosition + 1);
Expand Down

0 comments on commit b3646a0

Please sign in to comment.