diff options
Diffstat (limited to 'media/libstagefright/id3/ID3.cpp')
-rw-r--r-- | media/libstagefright/id3/ID3.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/media/libstagefright/id3/ID3.cpp b/media/libstagefright/id3/ID3.cpp index 6e14197..d1fd0d9 100644 --- a/media/libstagefright/id3/ID3.cpp +++ b/media/libstagefright/id3/ID3.cpp @@ -506,8 +506,9 @@ void ID3::Iterator::getString(String8 *id, String8 *comment) const { void ID3::Iterator::getstring(String8 *id, bool otherdata) const { id->setTo(""); - const uint8_t *frameData = mFrameData; - if (frameData == NULL) { + size_t size; + const uint8_t *frameData = getData(&size); + if ((size == 0) || (frameData == NULL)) { return; } @@ -645,6 +646,11 @@ const uint8_t *ID3::Iterator::getData(size_t *length) const { return NULL; } + // Prevent integer underflow + if (mFrameSize < getHeaderLength()) { + return NULL; + } + *length = mFrameSize - getHeaderLength(); return mFrameData; @@ -859,6 +865,9 @@ ID3::getAlbumArt(size_t *length, String8 *mime) const { while (!it.done()) { size_t size; const uint8_t *data = it.getData(&size); + if (!data) { + return NULL; + } if (mVersion == ID3_V2_3 || mVersion == ID3_V2_4) { uint8_t encoding = data[0]; |