summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-07-28 14:31:06 +0100
committerCaolán McNamara <caolanm@redhat.com>2016-07-28 14:40:29 +0100
commit2710211eb2333cafdb894742a8fa73fb02dc513b (patch)
tree0f2befb97d0a6f0fce4bb7de62a3067561469fff /writerfilter
parent7a887df4db129ac5222fd4068173b5a06d107a59 (diff)
fftester: throw on empty stack access
rather than spend the rest of my life protecting each one Change-Id: I181df33b052a0303f072ce0252d98562231569e2
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/qa/cppunittests/rtftok/data/fail/popstate-1.rtf (renamed from writerfilter/qa/cppunittests/rtftok/data/pass/popstate-1.rtf)bin198 -> 198 bytes
-rw-r--r--writerfilter/qa/cppunittests/rtftok/data/fail/popstate-2.rtf1
-rw-r--r--writerfilter/qa/cppunittests/rtftok/testrtftok.cxx4
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx2
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.hxx4
5 files changed, 9 insertions, 2 deletions
diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/popstate-1.rtf b/writerfilter/qa/cppunittests/rtftok/data/fail/popstate-1.rtf
index 04189171327a..04189171327a 100644
--- a/writerfilter/qa/cppunittests/rtftok/data/pass/popstate-1.rtf
+++ b/writerfilter/qa/cppunittests/rtftok/data/fail/popstate-1.rtf
Binary files differ
diff --git a/writerfilter/qa/cppunittests/rtftok/data/fail/popstate-2.rtf b/writerfilter/qa/cppunittests/rtftok/data/fail/popstate-2.rtf
new file mode 100644
index 000000000000..273bb135c9d0
--- /dev/null
+++ b/writerfilter/qa/cppunittests/rtftok/data/fail/popstate-2.rtf
@@ -0,0 +1 @@
+\\rttt\noTidqtpdp{\"pb18}\p{\"ptxtbr }
diff --git a/writerfilter/qa/cppunittests/rtftok/testrtftok.cxx b/writerfilter/qa/cppunittests/rtftok/testrtftok.cxx
index 12110377b0f0..e380728b3c30 100644
--- a/writerfilter/qa/cppunittests/rtftok/testrtftok.cxx
+++ b/writerfilter/qa/cppunittests/rtftok/testrtftok.cxx
@@ -74,6 +74,10 @@ bool RtfTest::load(const OUString&,
}
throw;
}
+ catch (const std::exception&)
+ {
+ return false;
+ }
}
void RtfTest::test()
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index b7bea75a2f8b..45be8a691d4e 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -1872,8 +1872,6 @@ RTFError RTFDocumentImpl::popState()
// ", dest state: " << m_aStates.top().eDestination);
checkUnicode(/*bUnicode =*/ true, /*bHex =*/ true);
- if (m_aStates.empty())
- return RTFError::GROUP_UNDER;
RTFParserState aState(m_aStates.top());
m_bWasInFrame = aState.aFrame.inFrame();
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
index 5ad21b2233dd..c8a28d321717 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
@@ -316,10 +316,14 @@ private:
public:
RTFParserState& top()
{
+ if (m_Impl.empty())
+ throw std::out_of_range("empty rtf state stack");
return m_Impl.back();
}
void pop()
{
+ if (m_Impl.empty())
+ throw std::out_of_range("empty rtf state stack");
return m_Impl.pop_back();
}
void push(RTFParserState const& rState)