summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-12-22 09:58:17 +0000
committerCaolán McNamara <caolanm@redhat.com>2020-12-22 13:19:47 +0100
commit6d6d104cbb382d0045e1f04b12d268992fa5c624 (patch)
tree89f2293f59c31e0730342985faecb2279039dea8 /vcl
parenta7d1d107ec58d3b00b4019c89edddcff71ca6ff3 (diff)
oss-fuzz: bmpfuzzer doesn't pass sanity check
Step #5: #6 0x63cceff in __cxa_throw (/tmp/not-out/bmpfuzzer+0x63cceff) Step #5: #7 0x4f121a in SvStream::ReadUInt16(unsigned short&) (/tmp/not-out/bmpfuzzer+0x4f121a) Step #5: #8 0x53919f in (anonymous namespace)::ImplReadDIBFileHeader(SvStream&, unsigned long&) (/tmp/not-out/bmpfuzzer+0x53919f) Step #5: #9 0x5375c7 in (anonymous namespace)::ImplReadDIB(Bitmap&, AlphaMask*, SvStream&, bool, bool, bool) (/tmp/not-out/bmpfuzzer+0x5375c7) Step #5: #10 0x537483 in ReadDIB(Bitmap&, SvStream&, bool, bool) (/tmp/not-out/bmpfuzzer+0x537483) Change-Id: I220f05ff92399dda6811df45bb9c2111e525d916 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108150 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/source/gdi/dibtools.cxx19
1 files changed, 13 insertions, 6 deletions
diff --git a/vcl/source/gdi/dibtools.cxx b/vcl/source/gdi/dibtools.cxx
index 4361f8b14053..a284d2022d24 100644
--- a/vcl/source/gdi/dibtools.cxx
+++ b/vcl/source/gdi/dibtools.cxx
@@ -1649,22 +1649,29 @@ bool ImplReadDIB(
bool bMSOFormat=false)
{
const SvStreamEndian nOldFormat(rIStm.GetEndian());
- const sal_uLong nOldPos(rIStm.Tell());
+ const auto nOldPos(rIStm.Tell());
sal_uLong nOffset(0);
bool bRet(false);
rIStm.SetEndian(SvStreamEndian::LITTLE);
- if(bFileHeader)
+ try
{
- if(ImplReadDIBFileHeader(rIStm, nOffset))
+ if(bFileHeader)
{
- bRet = ImplReadDIBBody(rIStm, rTarget, nOffset >= DIBV5HEADERSIZE ? pTargetAlpha : nullptr, nOffset, bIsMask, bMSOFormat);
+ if(ImplReadDIBFileHeader(rIStm, nOffset))
+ {
+ bRet = ImplReadDIBBody(rIStm, rTarget, nOffset >= DIBV5HEADERSIZE ? pTargetAlpha : nullptr, nOffset, bIsMask, bMSOFormat);
+ }
+ }
+ else
+ {
+ bRet = ImplReadDIBBody(rIStm, rTarget, nullptr, nOffset, bIsMask, bMSOFormat);
}
}
- else
+ catch (const SvStreamEOFException&)
{
- bRet = ImplReadDIBBody(rIStm, rTarget, nullptr, nOffset, bIsMask, bMSOFormat);
+ SAL_WARN("vcl", "EOF");
}
if(!bRet)