Kaydet (Commit) 4c8bba9a authored tarafından Stephan Bergmann's avatar Stephan Bergmann Kaydeden (comit) Caolán McNamara

Avoid overflow in PBMReader::ImplReadHeader

...as found by UBSan in CppunitTest_filter_ppm_test on
filter/qa/cppunit/data/pbm/fail/crash-1.pbm

Change-Id: Ib7c50ef1f07aba6b78f79c608be69c3dac38ddfe
(cherry picked from commit 662498ab)
Reviewed-on: https://gerrit.libreoffice.org/17984Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst db39370e
......@@ -218,17 +218,41 @@ bool PBMReader::ImplReadHeader()
nDat -= '0';
if ( nCount == 0 )
{
if (mnWidth > SAL_MAX_INT32 / 10)
{
return false;
}
mnWidth *= 10;
if (nDat > SAL_MAX_INT32 - mnWidth)
{
return false;
}
mnWidth += nDat;
}
else if ( nCount == 1 )
{
if (mnHeight > SAL_MAX_INT32 / 10)
{
return false;
}
mnHeight *= 10;
if (nDat > SAL_MAX_INT32 - mnHeight)
{
return false;
}
mnHeight += nDat;
}
else if ( nCount == 2 )
{
if (mnMaxVal > std::numeric_limits<sal_uLong>::max() / 10)
{
return false;
}
mnMaxVal *= 10;
if (nDat > std::numeric_limits<sal_uLong>::max() - mnMaxVal)
{
return false;
}
mnMaxVal += nDat;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment