summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-07-28 13:58:33 +0100
committerJan Holesovsky <kendy@collabora.com>2016-07-29 20:01:28 +0200
commitf6e08a1440a6c1b7f3b5aede21f3c9bf4b58cc2c (patch)
tree874ec8dfa20efd82e4e5dfb52a749f6784a644b9
parent84db766c95711b243e3b0e15ffd265bb65cb7729 (diff)
fftester: throw on empty stack access
rather than spend the rest of my life protecting each one Change-Id: I181df33b052a0303f072ce0252d98562231569e2 (cherry picked from commit 2710211eb2333cafdb894742a8fa73fb02dc513b) fftester: empty states stack Change-Id: I05dfffced9a8677650a46b43f65a29e9b21c5524 (cherry picked from commit 5de2d02806669812d43e7f23db58ab7a16373ce6) Related: tdf#75757 remove inheritance from std::deque Change-Id: Ia50ea146052c2014ea16474186e2d15ce93581c1 (cherry picked from commit 7a887df4db129ac5222fd4068173b5a06d107a59) Reviewed-on: https://gerrit.libreoffice.org/27640 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com> (cherry picked from commit 3e0fad77595438e1d36b94bfd6c17d8de8f8ceb0)
-rw-r--r--writerfilter/qa/cppunittests/rtftok/data/fail/popstate-1.rtfbin0 -> 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.hxx31
4 files changed, 32 insertions, 4 deletions
diff --git a/writerfilter/qa/cppunittests/rtftok/data/fail/popstate-1.rtf b/writerfilter/qa/cppunittests/rtftok/data/fail/popstate-1.rtf
new file mode 100644
index 000000000000..04189171327a
--- /dev/null
+++ 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 8c31f92abe9a..b84f4347e1d1 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.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
index d1f261d9f486..393074a7acda 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
@@ -310,19 +310,42 @@ public:
};
/// An RTF stack is similar to std::stack, except that it has an operator[].
-struct RTFStack : public std::deque<RTFParserState>
+struct RTFStack
{
+private:
+ std::deque<RTFParserState> m_Impl;
+public:
RTFParserState& top()
{
- return back();
+ if (m_Impl.empty())
+ throw std::out_of_range("empty rtf state stack");
+ return m_Impl.back();
}
void pop()
{
- return pop_back();
+ if (m_Impl.empty())
+ throw std::out_of_range("empty rtf state stack");
+ return m_Impl.pop_back();
}
void push(RTFParserState const& rState)
{
- return push_back(rState);
+ return m_Impl.push_back(rState);
+ }
+ bool empty() const
+ {
+ return m_Impl.empty();
+ }
+ size_t size() const
+ {
+ return m_Impl.size();
+ }
+ const RTFParserState& operator[](size_t nIndex) const
+ {
+ return m_Impl[nIndex];
+ }
+ RTFParserState& operator[](size_t nIndex)
+ {
+ return m_Impl[nIndex];
}
};