Merge "MPEG4Extractor: Limit ID3 parsing to chunk_data_size" into rvc-dev

gugelfrei
Marco Nelissen 4 years ago committed by Android (Google) Code Review
commit 081d066c6b

@ -2896,7 +2896,7 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
return ERROR_MALFORMED; return ERROR_MALFORMED;
} }
parseID3v2MetaData(data_offset + 6); parseID3v2MetaData(data_offset + 6, chunk_data_size - 6);
break; break;
} }
@ -4167,8 +4167,19 @@ status_t MPEG4Extractor::parse3GPPMetaData(off64_t offset, size_t size, int dept
return OK; return OK;
} }
void MPEG4Extractor::parseID3v2MetaData(off64_t offset) { void MPEG4Extractor::parseID3v2MetaData(off64_t offset, uint64_t size) {
ID3 id3(mDataSource, true /* ignorev1 */, offset); uint8_t *buffer = new (std::nothrow) uint8_t[size];
if (buffer == NULL) {
return;
}
if (mDataSource->readAt(offset, buffer, size) != (ssize_t)size) {
delete[] buffer;
buffer = NULL;
return;
}
ID3 id3(buffer, size, true /* ignorev1 */);
delete[] buffer;
if (id3.isValid()) { if (id3.isValid()) {
struct Map { struct Map {

@ -161,7 +161,7 @@ private:
status_t parseITunesMetaData(off64_t offset, size_t size); status_t parseITunesMetaData(off64_t offset, size_t size);
status_t parseColorInfo(off64_t offset, size_t size); status_t parseColorInfo(off64_t offset, size_t size);
status_t parse3GPPMetaData(off64_t offset, size_t size, int depth); status_t parse3GPPMetaData(off64_t offset, size_t size, int depth);
void parseID3v2MetaData(off64_t offset); void parseID3v2MetaData(off64_t offset, uint64_t size);
status_t parseQTMetaKey(off64_t data_offset, size_t data_size); status_t parseQTMetaKey(off64_t data_offset, size_t data_size);
status_t parseQTMetaVal(int32_t keyId, off64_t data_offset, size_t data_size); status_t parseQTMetaVal(int32_t keyId, off64_t data_offset, size_t data_size);

Loading…
Cancel
Save