diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2015-06-19 11:33:24 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2015-06-19 13:26:09 +0200 |
commit | cbe944e323edb20f958bb46ea644de659b75382e (patch) | |
tree | c51e99e46e447f139fbbc48ff0d9aa8885e70a82 | |
parent | 2f6af46dedcf3ad5ec3a40876dbf1120eec359b6 (diff) |
Catch inadvertent uses of OUString(sal_Unicode) ctor
...with numeric values that are not meant to be characters. Inspired by
<https://gerrit.libreoffice.org/#/c/16339/> "OUString: add constructor from
single Unicode code point" and ecaf1cb3861c1b519a1495487fc796884cf37b92 "seems
to be what was meant." Found e46e8d19458fd64ff20b1013e5eeabd07e62379c "Shall
this produce a string representation of a number?" and
f2a0e4032734d6be635f14ade3dea499c29ec6c2 "Don't truncate a UTF-32 code point to
a UTF-16 code unit."
(LIBO_INTERNAL_ONLY mostly because it uses a C++11 delegating ctor for
simplicity, but also because it requires mild modifications to client code, see
additional changes in this commit and some other recent commits.)
Change-Id: I8a156f01d1b772c6052d7afaa088ae13ed234e2b
-rw-r--r-- | include/rtl/ustring.hxx | 11 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwpfribmark.cxx | 18 | ||||
-rw-r--r-- | sdext/source/pdfimport/tree/drawtreevisiting.cxx | 6 | ||||
-rw-r--r-- | svx/source/tbxctrls/layctrl.cxx | 2 | ||||
-rw-r--r-- | sw/source/core/text/EnhancedPDFExportHelper.cxx | 2 | ||||
-rw-r--r-- | sw/source/ui/misc/srtdlg.cxx | 2 | ||||
-rw-r--r-- | sw/source/uibase/dbui/mmconfigitem.cxx | 2 | ||||
-rw-r--r-- | vcl/source/app/IconThemeInfo.cxx | 2 |
8 files changed, 28 insertions, 17 deletions
diff --git a/include/rtl/ustring.hxx b/include/rtl/ustring.hxx index 80d67e843677..2c56443e8219 100644 --- a/include/rtl/ustring.hxx +++ b/include/rtl/ustring.hxx @@ -172,6 +172,17 @@ public: rtl_uString_newFromStr_WithLength( &pData, &value, 1 ); } +#if defined LIBO_INTERNAL_ONLY && !defined RTL_STRING_UNITTEST_CONCAT + /// @cond INTERNAL + // Catch inadvertent conversions to the above ctor (but still allow + // construction from char literals): + OUString(int) = delete; + explicit OUString(char c): + OUString(sal_Unicode(static_cast<unsigned char>(c))) + {} + /// @endcond +#endif + /** New string from a Unicode character buffer array. diff --git a/lotuswordpro/source/filter/lwpfribmark.cxx b/lotuswordpro/source/filter/lwpfribmark.cxx index 143a00f9365f..fa17d0110cd8 100644 --- a/lotuswordpro/source/filter/lwpfribmark.cxx +++ b/lotuswordpro/source/filter/lwpfribmark.cxx @@ -666,13 +666,13 @@ void LwpFribField::RegisterDateTimeStyle(const OUString& sFormula) pDateStyle = new XFDateStyle; OUString sText; pDateStyle->AddYear(); - sText = OUString(0x5e74); + sText = OUString(sal_Unicode(0x5e74)); pDateStyle->AddText(sText); pDateStyle->AddMonth(false); - sText = OUString(0x6708); + sText = OUString(sal_Unicode(0x6708)); pDateStyle->AddText(sText); pDateStyle->AddMonthDay(false); - sText = OUString(0x65e5); + sText = OUString(sal_Unicode(0x65e5)); pDateStyle->AddText(sText); } else if (sFormula == "%FLoa" || sFormula == "%FLooaa" || sFormula == "%FLOA" ) @@ -680,10 +680,10 @@ void LwpFribField::RegisterDateTimeStyle(const OUString& sFormula) pDateStyle = new XFDateStyle; OUString sText; pDateStyle->AddMonth(false); - sText = OUString(0x6708); + sText = OUString(sal_Unicode(0x6708)); pDateStyle->AddText(sText); pDateStyle->AddMonthDay(false); - sText = OUString(0x65e5); + sText = OUString(sal_Unicode(0x65e5)); pDateStyle->AddText(sText); } else if (sFormula == "%FLYYYY/M/D" || sFormula == "%FLGGGG/od/ad") @@ -973,10 +973,10 @@ void LwpFribField::RegisterDateTimeStyle(const OUString& sFormula) pTimeStyle = new XFTimeStyle; pTimeStyle->AddHour(false); OUString sText; - sText = OUString(0x70b9); + sText = OUString(sal_Unicode(0x70b9)); pTimeStyle->AddText(sText); pTimeStyle->AddMinute(false); - sText = OUString(0x5206); + sText = OUString(sal_Unicode(0x5206)); pTimeStyle->AddText(sText); } else if (sFormula == "%FLjjjF" || sFormula == "%FLJJJFF" ) @@ -985,10 +985,10 @@ void LwpFribField::RegisterDateTimeStyle(const OUString& sFormula) pTimeStyle->SetAmPm(true); pTimeStyle->AddHour(false); OUString sText; - sText = OUString(0x70b9); + sText = OUString(sal_Unicode(0x70b9)); pTimeStyle->AddText(sText); pTimeStyle->AddMinute(false); - sText = OUString(0x5206); + sText = OUString(sal_Unicode(0x5206)); pTimeStyle->AddText(sText); } //chinese version end diff --git a/sdext/source/pdfimport/tree/drawtreevisiting.cxx b/sdext/source/pdfimport/tree/drawtreevisiting.cxx index 6c7235d87943..4d262ca23336 100644 --- a/sdext/source/pdfimport/tree/drawtreevisiting.cxx +++ b/sdext/source/pdfimport/tree/drawtreevisiting.cxx @@ -95,9 +95,9 @@ void DrawXmlEmitter::visit( TextElement& elem, const std::list< Element* >::cons if( elem.Text.isEmpty() ) return; - OUString strSpace(32); - OUString strNbSpace(160); - OUString tabSpace(0x09); + OUString strSpace(sal_Unicode(32)); + OUString strNbSpace(sal_Unicode(160)); + OUString tabSpace(sal_Unicode(0x09)); PropertyMap aProps; if( elem.StyleId != -1 ) { diff --git a/svx/source/tbxctrls/layctrl.cxx b/svx/source/tbxctrls/layctrl.cxx index 40e195179b64..504bc2f98579 100644 --- a/svx/source/tbxctrls/layctrl.cxx +++ b/svx/source/tbxctrls/layctrl.cxx @@ -336,7 +336,7 @@ void TableWindow::Paint(vcl::RenderContext& rRenderContext, const Rectangle&) // #i95350# force RTL output if (IsRTLEnabled()) - aText = OUString(0x202D) + aText; + aText = OUString(sal_Unicode(0x202D)) + aText; rRenderContext.DrawText(Point(nTextX, nTextY), aText); } diff --git a/sw/source/core/text/EnhancedPDFExportHelper.cxx b/sw/source/core/text/EnhancedPDFExportHelper.cxx index e8b787bf908f..2a679f443b0a 100644 --- a/sw/source/core/text/EnhancedPDFExportHelper.cxx +++ b/sw/source/core/text/EnhancedPDFExportHelper.cxx @@ -763,7 +763,7 @@ void SwTaggedPDFHelper::SetAttributes( vcl::PDFWriter::StructElement eType ) { OUString aActualText; if (pPor->GetWhichPor() == POR_SOFTHYPH || pPor->GetWhichPor() == POR_HYPH) - aActualText = OUString(0xad); // soft hyphen + aActualText = OUString(sal_Unicode(0xad)); // soft hyphen else aActualText = rInf.GetText().copy(rInf.GetIdx(), pPor->GetLen()); mpPDFExtOutDevData->SetActualText( aActualText ); diff --git a/sw/source/ui/misc/srtdlg.cxx b/sw/source/ui/misc/srtdlg.cxx index 7692e9272565..3603b39de74c 100644 --- a/sw/source/ui/misc/srtdlg.cxx +++ b/sw/source/ui/misc/srtdlg.cxx @@ -406,7 +406,7 @@ IMPL_LINK_NOARG(SwSortDlg, DelimCharHdl) { SFX_ITEMSET_ARG( pMap->GetOutputItemSet(), pItem, SfxInt32Item, SID_ATTR_CHAR, false ); if ( pItem ) - m_pDelimEdt->SetText( OUString(pItem->GetValue()) ); + m_pDelimEdt->SetText( OUString(sal_Unicode(pItem->GetValue())) ); } } return 0; diff --git a/sw/source/uibase/dbui/mmconfigitem.cxx b/sw/source/uibase/dbui/mmconfigitem.cxx index 468a54c19e2b..c5bc58e38c0b 100644 --- a/sw/source/uibase/dbui/mmconfigitem.cxx +++ b/sw/source/uibase/dbui/mmconfigitem.cxx @@ -392,7 +392,7 @@ static void lcl_ConvertToNumbers(OUString& rBlock, const ResStringArray& rHeader for(sal_uInt32 i = 0; i < rHeaders.Count(); ++i) { OUString sHeader = "<" + rHeaders.GetString( i ) + ">"; - OUString sReplace = "<" + OUString('0' + i) + ">"; + OUString sReplace = "<" + OUString(sal_Unicode('0' + i)) + ">"; sBlock = sBlock.replaceAll(sHeader, sReplace); } rBlock = sBlock; diff --git a/vcl/source/app/IconThemeInfo.cxx b/vcl/source/app/IconThemeInfo.cxx index da07e2c6bf77..95b47fbc1b0c 100644 --- a/vcl/source/app/IconThemeInfo.cxx +++ b/vcl/source/app/IconThemeInfo.cxx @@ -132,7 +132,7 @@ IconThemeInfo::ThemeIdToDisplayName(const OUString& themeId) OUString r; sal_Unicode firstLetter = themeId[0]; if (rtl::isAsciiLowerCase(firstLetter)) { - r = OUString(rtl::toAsciiUpperCase(firstLetter)); + r = OUString(sal_Unicode(rtl::toAsciiUpperCase(firstLetter))); r += themeId.copy(1); } else { |