summaryrefslogtreecommitdiffstats
path: root/filter
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-01-26 21:01:06 +0000
committerCaolán McNamara <caolanm@redhat.com>2017-01-26 21:04:30 +0000
commite17a34e957c21a8cd2977b1b0e1c9a427c244aed (patch)
tree675432b28e9051bb513a5dc5a36a5c30d946f2ed /filter
parentRelated: tdf#104312 create palette on demand (diff)
downloadcore-e17a34e957c21a8cd2977b1b0e1c9a427c244aed.tar.gz
core-e17a34e957c21a8cd2977b1b0e1c9a427c244aed.zip
ofz: check if the stream is able to meet the eps len claim before reading
Change-Id: I65407bffb67449e203b8ead23554a4e88387d214
Diffstat (limited to 'filter')
-rw-r--r--filter/source/graphicfilter/ieps/ieps.cxx15
1 files changed, 11 insertions, 4 deletions
diff --git a/filter/source/graphicfilter/ieps/ieps.cxx b/filter/source/graphicfilter/ieps/ieps.cxx
index 912be13253f3..090bc6543e87 100644
--- a/filter/source/graphicfilter/ieps/ieps.cxx
+++ b/filter/source/graphicfilter/ieps/ieps.cxx
@@ -540,7 +540,7 @@ ipsGraphicImport( SvStream & rStream, Graphic & rGraphic, FilterConfigItem* )
Graphic aGraphic;
bool bRetValue = false;
bool bHasPreview = false;
- sal_uInt32 nSignature, nPSStreamPos, nPSSize;
+ sal_uInt32 nSignature = 0, nPSStreamPos, nPSSize = 0;
sal_uInt32 nSizeWMF = 0;
sal_uInt32 nPosWMF = 0;
sal_uInt32 nSizeTIFF = 0;
@@ -585,13 +585,20 @@ ipsGraphicImport( SvStream & rStream, Graphic & rGraphic, FilterConfigItem* )
nPSStreamPos = nOrigPos; // no preview available _>so we must get the size manually
nPSSize = rStream.Seek( STREAM_SEEK_TO_END ) - nOrigPos;
}
+
std::unique_ptr<sal_uInt8[]> pHeader( new sal_uInt8[ 22 ] );
rStream.Seek( nPSStreamPos );
rStream.ReadBytes(pHeader.get(), 22); // check PostScript header
- if ( ImplSearchEntry( pHeader.get(), reinterpret_cast<sal_uInt8 const *>("%!PS-Adobe"), 10, 10 ) &&
- ImplSearchEntry( &pHeader[ 15 ], reinterpret_cast<sal_uInt8 const *>("EPS"), 3, 3 ) )
+ bool bOk = ImplSearchEntry(pHeader.get(), reinterpret_cast<sal_uInt8 const *>("%!PS-Adobe"), 10, 10) &&
+ ImplSearchEntry(&pHeader[ 15 ], reinterpret_cast<sal_uInt8 const *>("EPS"), 3, 3);
+ if (bOk)
+ {
+ rStream.Seek(nPSStreamPos);
+ bOk = rStream.remainingSize() >= nPSSize;
+ SAL_WARN_IF(!bOk, "filter.eps", "eps claims to be: " << nPSSize << " in size, but only " << rStream.remainingSize() << " remains");
+ }
+ if (bOk)
{
- rStream.Seek( nPSStreamPos );
std::unique_ptr<sal_uInt8[]> pBuf( new sal_uInt8[ nPSSize ] );
sal_uInt32 nBufStartPos = rStream.Tell();