summaryrefslogtreecommitdiff
path: root/filter
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2015-07-17 09:59:23 +0100
committerCaolán McNamara <caolanm@redhat.com>2015-07-17 10:00:45 +0100
commit49bf2c6700d8f0fc9155ac2d06bf0a7bd84915d8 (patch)
tree8f0d0a1db2f769741dc2bd1b40977823f35a9a56 /filter
parent64fe684368bd54f54f6838c7d8a59c9efeaa0965 (diff)
detect another loop in tif format
Change-Id: I950f751277d9080b4fc00c38f63453cce81bcc32
Diffstat (limited to 'filter')
-rw-r--r--filter/qa/cppunit/data/tiff/fail/hang-2.tiffbin0 -> 111 bytes
-rw-r--r--filter/source/graphicfilter/itiff/itiff.cxx11
2 files changed, 10 insertions, 1 deletions
diff --git a/filter/qa/cppunit/data/tiff/fail/hang-2.tiff b/filter/qa/cppunit/data/tiff/fail/hang-2.tiff
new file mode 100644
index 000000000000..28ec8c0d3c2a
--- /dev/null
+++ b/filter/qa/cppunit/data/tiff/fail/hang-2.tiff
Binary files differ
diff --git a/filter/source/graphicfilter/itiff/itiff.cxx b/filter/source/graphicfilter/itiff/itiff.cxx
index e132fab24696..aed15f629cda 100644
--- a/filter/source/graphicfilter/itiff/itiff.cxx
+++ b/filter/source/graphicfilter/itiff/itiff.cxx
@@ -1181,10 +1181,19 @@ bool TIFFReader::ReadTIFF(SvStream & rTIFF, Graphic & rGraphic )
{
sal_uInt32 nOffset = nFirstIfd;
+ std::vector<sal_uInt32> aSeenOffsets;
// calculate length of TIFF file
do
{
- pTIFF->Seek( nOrigPos + nOffset );
+ if (std::find(aSeenOffsets.begin(), aSeenOffsets.end(), nOffset) != aSeenOffsets.end())
+ {
+ SAL_WARN("filter.tiff", "Parsing error: " << nOffset <<
+ " already processed, format loop");
+ bStatus = false;
+ break;
+ }
+ pTIFF->Seek(nOrigPos + nOffset);
+ aSeenOffsets.push_back(nOffset);
if( pTIFF->GetError() )
{