summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2022-12-17 20:21:47 +0000
committerCaolán McNamara <caolanm@redhat.com>2022-12-17 21:50:27 +0000
commit2b6d04b8493a6b05c8ed0afb0c1e96d441ba876b (patch)
tree2e9d2aeac8cfe475daf872cbc07edc00ffc445b0
parentf7b30ab0141e2038b0e5e882d634065878c24c3f (diff)
move and rename sanitizeString for reuse
Change-Id: I8378f3df79e511cf2d385ace1cd7964ab1c76e7b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144388 Tested-by: Caolán McNamara <caolanm@redhat.com> Reviewed-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--comphelper/source/misc/string.cxx27
-rw-r--r--include/comphelper/string.hxx9
-rw-r--r--sw/source/filter/ww8/ww8par3.cxx28
3 files changed, 37 insertions, 27 deletions
diff --git a/comphelper/source/misc/string.cxx b/comphelper/source/misc/string.cxx
index d0f7cb9ca423..da5c8b92c05c 100644
--- a/comphelper/source/misc/string.cxx
+++ b/comphelper/source/misc/string.cxx
@@ -32,6 +32,7 @@
#include <rtl/ustrbuf.hxx>
#include <rtl/string.hxx>
#include <rtl/strbuf.hxx>
+#include <sal/log.hxx>
#include <sal/types.h>
#include <comphelper/string.hxx>
@@ -652,6 +653,32 @@ void replaceAt(OUStringBuffer& rIn, sal_Int32 nIndex, sal_Int32 nCount, std::u16
rIn.setLength(nNewLength);
}
+OUString sanitizeStringSurrogates(const OUString& rString)
+{
+ sal_Int32 i=0;
+ while (i < rString.getLength())
+ {
+ sal_Unicode c = rString[i];
+ if (rtl::isHighSurrogate(c))
+ {
+ if (i+1 == rString.getLength()
+ || !rtl::isLowSurrogate(rString[i+1]))
+ {
+ SAL_WARN("comphelper", "Surrogate error: high without low");
+ return rString.copy(0, i);
+ }
+ ++i; //skip correct low
+ }
+ if (rtl::isLowSurrogate(c)) //bare low without preceding high
+ {
+ SAL_WARN("comphelper", "Surrogate error: low without high");
+ return rString.copy(0, i);
+ }
+ ++i;
+ }
+ return rString;
+}
+
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/comphelper/string.hxx b/include/comphelper/string.hxx
index b43086a77d30..06c825b36832 100644
--- a/include/comphelper/string.hxx
+++ b/include/comphelper/string.hxx
@@ -375,6 +375,15 @@ COMPHELPER_DLLPUBLIC bool isdigitAsciiString(std::string_view rString);
*/
COMPHELPER_DLLPUBLIC bool isdigitAsciiString(std::u16string_view rString);
+/** Santitize an OUString to not have invalid surrogates
+
+ @param rString An OUString
+
+ @return same string if no surrogates or surrogates are valid.
+ Otherwise the string truncated to the valid sequence.
+ */
+COMPHELPER_DLLPUBLIC OUString sanitizeStringSurrogates(const OUString& rString);
+
} // namespace comphelper::string
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/ww8/ww8par3.cxx b/sw/source/filter/ww8/ww8par3.cxx
index f02a2972e058..445e5442a0fe 100644
--- a/sw/source/filter/ww8/ww8par3.cxx
+++ b/sw/source/filter/ww8/ww8par3.cxx
@@ -490,32 +490,6 @@ WW8LSTInfo* WW8ListManager::GetLSTByListId( sal_uInt32 nIdLst ) const
return aResult->get();
}
-static OUString sanitizeString(const OUString& rString)
-{
- sal_Int32 i=0;
- while (i < rString.getLength())
- {
- sal_Unicode c = rString[i];
- if (rtl::isHighSurrogate(c))
- {
- if (i+1 == rString.getLength()
- || !rtl::isLowSurrogate(rString[i+1]))
- {
- SAL_WARN("sw.ww8", "Surrogate error: high without low");
- return rString.copy(0, i);
- }
- ++i; //skip correct low
- }
- if (rtl::isLowSurrogate(c)) //bare low without preceding high
- {
- SAL_WARN("sw.ww8", "Surrogate error: low without high");
- return rString.copy(0, i);
- }
- ++i;
- }
- return rString;
-}
-
SvxNumType WW8ListManager::GetSvxNumTypeFromMSONFC(sal_uInt16 nNFC)
{
SvxNumType nType(SVX_NUM_ARABIC);
@@ -874,7 +848,7 @@ bool WW8ListManager::ReadLVL(SwNumFormat& rNumFormat, std::unique_ptr<SfxItemSet
// 4. Read numbering String. Results in prefix and postfix
- OUString sNumString(sanitizeString(read_uInt16_PascalString(m_rSt)));
+ OUString sNumString(comphelper::string::sanitizeStringSurrogates(read_uInt16_PascalString(m_rSt)));
// 5. convert read values into Writer syntax