diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-02-14 11:33:44 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2017-02-14 11:34:52 +0000 |
commit | dfc58d2db77c205e5829d557045eb8f6801a664d (patch) | |
tree | 9db45cac39d33e1405e556a31e65042218ba3da1 /filter | |
parent | 5e4fb242789f619b66fad4392df4079f6c4863dc (diff) |
check data needed to fulfil ras claims before allocating
Change-Id: Ifdd820e4ea4287f97cc07cb86c0a180d06081449
Diffstat (limited to 'filter')
-rw-r--r-- | filter/source/graphicfilter/iras/iras.cxx | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/filter/source/graphicfilter/iras/iras.cxx b/filter/source/graphicfilter/iras/iras.cxx index 3fb27e56e507..30d618ef6032 100644 --- a/filter/source/graphicfilter/iras/iras.cxx +++ b/filter/source/graphicfilter/iras/iras.cxx @@ -168,6 +168,14 @@ bool RASReader::ReadRAS(Graphic & rGraphic) if (!bOk) return false; + if (mnType != RAS_TYPE_BYTE_ENCODED) //simple raw format + { + if (m_rRAS.remainingSize() < static_cast<sal_uInt64>(mnHeight) * mnWidth * mnDepth / 8) + { + return false; + } + } + Bitmap aBmp(Size(mnWidth, mnHeight), mnDstBitsPerPix); Bitmap::ScopedWriteAccess pAcc(aBmp); if (pAcc == nullptr) @@ -178,6 +186,7 @@ bool RASReader::ReadRAS(Graphic & rGraphic) pAcc->SetPalette(aPalette); } + // Bitmap-Daten einlesen mbStatus = ImplReadBody(pAcc.get()); @@ -191,7 +200,7 @@ bool RASReader::ImplReadHeader() { m_rRAS.ReadInt32(mnWidth).ReadInt32(mnHeight).ReadInt32(mnDepth).ReadInt32(mnImageDatSize).ReadInt32(mnType).ReadInt32(mnColorMapType).ReadInt32(mnColorMapSize); - if (mnWidth <= 0 || mnHeight <= 0 || mnImageDatSize <= 0 || !m_rRAS.good()) + if (!m_rRAS.good() || mnWidth <= 0 || mnHeight <= 0 || mnImageDatSize <= 0) mbStatus = false; switch ( mnDepth ) @@ -223,7 +232,6 @@ bool RASReader::ImplReadHeader() return mbStatus; } - bool RASReader::ImplReadBody(BitmapWriteAccess * pAcc) { sal_Int32 x, y; |