Skip to content

Commit

Permalink
Prevent integer overflow when processing covr MPEG4 atoms
Browse files Browse the repository at this point in the history
If the 'chunk_data_size' value is SIZE_MAX, an integer overflow will occur
and cause an undersized buffer to be allocated. The following processing
then overfills the resulting memory and creates a potentially exploitable
condition. Ensure that integer overflow does not occur.

Bug: 20923261
Change-Id: I75cce323aec04a612e5a230ecd7c2077ce06035f
  • Loading branch information
jduck authored and andi34 committed Jun 7, 2016
1 parent c88d6b7 commit 00b3442
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions media/libstagefright/MPEG4Extractor.cpp
Expand Up @@ -1752,6 +1752,10 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
if (mFileMetaData != NULL) {
ALOGV("chunk_data_size = %lld and data_offset = %lld",
chunk_data_size, data_offset);

if (chunk_data_size >= SIZE_MAX - 1) {
return ERROR_MALFORMED;
}
sp<ABuffer> buffer = new ABuffer(chunk_data_size + 1);
if (mDataSource->readAt(
data_offset, buffer->data(), chunk_data_size) != (ssize_t)chunk_data_size) {
Expand Down

0 comments on commit 00b3442

Please sign in to comment.