summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorTobias Lippert <drtl@fastmail.fm>2015-02-22 13:59:03 +0100
committerMichael Stahl <mstahl@redhat.com>2015-03-10 15:13:03 +0100
commit09669c4f89ad5c4c012ba114811b49f7805e3801 (patch)
tree2c0a5a2d3493f2064cd1b114c41af66f68f19eeb /sw
parent94eed3f5bb675d60239414ad2289bde7cc4d4f8e (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>
Diffstat (limited to 'sw')
-rw-r--r--sw/qa/core/test_ToxWhitespaceStripper.cxx14
-rw-r--r--sw/source/core/tox/ToxWhitespaceStripper.cxx7
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);
}