mirror of
https://github.com/taglib/taglib.git
synced 2025-05-27 13:10:26 -04:00
Be more careful when parsing Vorbis Comments
This commit is contained in:
parent
934ce51790
commit
b7ec0d26ab
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user