[Libreoffice-commits] core.git: sw/qa sw/source

Tobias Lippert drtl at fastmail.fm
Tue Mar 3 02:09:06 PST 2015


 sw/qa/core/test_ToxWhitespaceStripper.cxx    |   14 ++++++++++++++
 sw/source/core/tox/ToxWhitespaceStripper.cxx |    7 +++++++
 2 files changed, 21 insertions(+)

New commits:
commit 4bdbea5447f36beb9cc33df173a89a49a9918290
Author: Tobias Lippert <drtl at fastmail.fm>
Date:   Sun Feb 22 13:59:03 2015 +0100

    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 at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sw/qa/core/test_ToxWhitespaceStripper.cxx b/sw/qa/core/test_ToxWhitespaceStripper.cxx
index 30da0bd..5381933 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 cd0024e..4918a73 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);
 }
 


More information about the Libreoffice-commits mailing list