Avoid integer overflow.
This commit is contained in:
parent
f4a37c63f2
commit
c0ecc2ae36
@ -281,7 +281,7 @@ namespace Exiv2 {
|
||||
if (size < 4)
|
||||
throw Error(kerCorruptedMetadata);
|
||||
uint32_t o = getULong(pData + size - 4, byteOrder);
|
||||
if ( o+2 > size )
|
||||
if ( o > size-2 )
|
||||
throw Error(kerCorruptedMetadata);
|
||||
uint16_t count = getUShort(pData + o, byteOrder);
|
||||
#ifdef DEBUG
|
||||
@ -289,7 +289,7 @@ namespace Exiv2 {
|
||||
<<", " << count << " entries \n";
|
||||
#endif
|
||||
o += 2;
|
||||
if ( (o + (count * 10)) > size )
|
||||
if ( static_cast<uint32_t>(count) * 10 > size-o )
|
||||
throw Error(kerCorruptedMetadata);
|
||||
|
||||
for (uint16_t i = 0; i < count; ++i) {
|
||||
|
||||
BIN
test/data/issue_843_poc.crw
Normal file
BIN
test/data/issue_843_poc.crw
Normal file
Binary file not shown.
22
tests/bugfixes/github/test_issue_843.py
Normal file
22
tests/bugfixes/github/test_issue_843.py
Normal file
@ -0,0 +1,22 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from system_tests import CaseMeta, path
|
||||
|
||||
|
||||
class IntegerOverflowInCiffDirectoryReadDirectory(metaclass=CaseMeta):
|
||||
"""
|
||||
Regression test for the bug described in:
|
||||
https://github.com/Exiv2/exiv2/issues/843
|
||||
|
||||
An integer overflow causes an out-of-bounds read.
|
||||
"""
|
||||
url = "https://github.com/Exiv2/exiv2/issues/843"
|
||||
|
||||
filename = path("$data_path/issue_843_poc.crw")
|
||||
commands = ["$exiv2 $filename"]
|
||||
stdout = [""]
|
||||
stderr = [
|
||||
"""$exiv2_exception_message $filename:
|
||||
$kerCorruptedMetadata
|
||||
"""]
|
||||
retval = [1]
|
||||
Loading…
Reference in New Issue
Block a user