diff options
author | Tobias Lippert <drtl@fastmail.fm> | 2015-02-22 13:59:03 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2015-03-10 15:13:03 +0100 |
commit | 09669c4f89ad5c4c012ba114811b49f7805e3801 (patch) | |
tree | 2c0a5a2d3493f2064cd1b114c41af66f68f19eeb | |
parent | 94eed3f5bb675d60239414ad2289bde7cc4d4f8e (diff) |
tdf#89520 Make TOX creation more robust
The code is now more robust and will accept illegal arguments.
Change-Id: I43ae82b953cea845fb170aa7b6e8d42470ad4e5e
Reviewed-on: https://gerrit.libreoffice.org/14580
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 4bdbea5447f36beb9cc33df173a89a49a9918290)
Signed-off-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r-- | sw/qa/core/test_ToxWhitespaceStripper.cxx | 14 | ||||
-rw-r--r-- | sw/source/core/tox/ToxWhitespaceStripper.cxx | 7 |
2 files changed, 21 insertions, 0 deletions
diff --git a/sw/qa/core/test_ToxWhitespaceStripper.cxx b/sw/qa/core/test_ToxWhitespaceStripper.cxx index 30da0bdb1a6b..53819333579e 100644 --- a/sw/qa/core/test_ToxWhitespaceStripper.cxx +++ b/sw/qa/core/test_ToxWhitespaceStripper.cxx @@ -32,10 +32,14 @@ class ToxWhitespaceStripperTest : public CppUnit::TestFixture void PositionAfterStringCanBeRequested(); + void + InvalidPositionIsMappedToLastEntry(); + CPPUNIT_TEST_SUITE(ToxWhitespaceStripperTest); CPPUNIT_TEST(MappingCharactersToVariousStrippedStringsWorks); CPPUNIT_TEST(StrippingWhitespacesFromVariousStringsWorks); CPPUNIT_TEST(PositionAfterStringCanBeRequested); + CPPUNIT_TEST(InvalidPositionIsMappedToLastEntry); CPPUNIT_TEST_SUITE_END(); @@ -141,6 +145,16 @@ ToxWhitespaceStripperTest::PositionAfterStringCanBeRequested() CPPUNIT_ASSERT_EQUAL(expected, sut.GetPositionInStrippedString(test.getLength())); } +void +ToxWhitespaceStripperTest::InvalidPositionIsMappedToLastEntry() +{ + OUString test("ab c"); + ToxWhitespaceStripper sut(test); + sal_Int32 expected = 4; // the length of the string after merging the two whitespaces + sal_Int32 result = sut.GetPositionInStrippedString(40); // a value past the original string length + CPPUNIT_ASSERT_EQUAL(expected, result); +} + // Put the test suite in the registry CPPUNIT_TEST_SUITE_REGISTRATION(ToxWhitespaceStripperTest); diff --git a/sw/source/core/tox/ToxWhitespaceStripper.cxx b/sw/source/core/tox/ToxWhitespaceStripper.cxx index cd0024ef33d8..4918a73cff08 100644 --- a/sw/source/core/tox/ToxWhitespaceStripper.cxx +++ b/sw/source/core/tox/ToxWhitespaceStripper.cxx @@ -10,6 +10,8 @@ #include "ToxWhitespaceStripper.hxx" #include "rtl/ustrbuf.hxx" +#include "sal/log.hxx" + #include <boost/numeric/conversion/cast.hpp> namespace sw { @@ -50,6 +52,11 @@ sal_Int32 ToxWhitespaceStripper::GetPositionInStrippedString(sal_Int32 pos) const { size_t upos = boost::numeric_cast<size_t>(pos); + if (upos >= mNewPositions.size()) { + SAL_WARN("sw.core", "Requested position of TOX entry text which does not exist. " + "Maybe the formatting hint is corrupt?"); + return mNewPositions.back(); + } return mNewPositions.at(upos); } |