summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2013-06-12 15:58:17 +0200
committerStephan Bergmann <sbergman@redhat.com>2013-06-13 17:08:36 +0200
commit3af0114a295d2a6c600117adb5bcd6689c0c787e (patch)
tree262f32143b99a8754e517be454681267cadaa85f
parent4edbfa892bfe6ca81c88363b2249e0b7d5eef31f (diff)
Introduce O[U]String::toUInt32
...which has become necessary since bd60d41176da540b01d7583cfe00637431967f39 "Handle oveflow in O(U)String::toInt() functions" reduces values in the range (SAL_MAX_INT32 .. SAL_MAX_UINT32] to zero, but some calls of toInt32(16) relied on getting a correct (unsigned) value for the whole input range ["0" .. "FFFFFFFF"] (see libreoffice-4-1 commit 9bf6c83367cedb7be81bf67f30d2147d26c7a8c3 "Revert overflow checks in O[U]String::toInt{32,64} again"). Audited all uses of toInt32/64 with non-decimal radix. (There is still a TODO comment in oox/source/helper/attributelist.cxx, and stoc/source/typeconv/convert.cxx will still need some love and test code.) Change-Id: Iadaca1c0e41dab553687d0ce41c20c10cd657a95
-rw-r--r--configmgr/source/valueparser.cxx21
-rw-r--r--framework/source/xml/imagesdocumenthandler.cxx2
-rw-r--r--i18npool/source/localedata/localedata.cxx2
-rw-r--r--include/rtl/string.h21
-rw-r--r--include/rtl/string.hxx17
-rw-r--r--include/rtl/ustring.h21
-rw-r--r--include/rtl/ustring.hxx17
-rw-r--r--jvmfwk/source/elements.cxx4
-rw-r--r--odk/examples/cpp/custompanel/ctp_factory.cxx2
-rw-r--r--oox/source/helper/attributelist.cxx6
-rw-r--r--oox/source/vml/vmlformatting.cxx8
-rw-r--r--sal/qa/rtl/strings/test_strings_toint.cxx7
-rw-r--r--sal/rtl/strtmpl.cxx69
-rw-r--r--sal/util/sal.map6
-rw-r--r--sc/source/filter/html/htmlpars.cxx2
-rw-r--r--sc/source/filter/oox/drawingfragment.cxx8
-rw-r--r--sc/source/filter/oox/pagesettings.cxx2
-rw-r--r--stoc/source/typeconv/convert.cxx6
-rw-r--r--svl/source/numbers/zforlist.cxx3
-rw-r--r--svl/source/passwordcontainer/passwordcontainer.cxx6
-rw-r--r--svx/source/customshapes/EnhancedCustomShape2d.cxx2
-rw-r--r--vcl/generic/fontmanager/fontmanager.cxx2
-rw-r--r--vcl/source/app/settings.cxx2
-rw-r--r--vcl/unx/generic/window/salframe.cxx2
-rw-r--r--writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx2
-rw-r--r--xmloff/source/style/xmlnumfe.cxx7
-rw-r--r--xmlscript/source/xmldlg_imexp/imp_share.hxx2
-rw-r--r--xmlscript/source/xmllib_imexp/imp_share.hxx2
28 files changed, 186 insertions, 65 deletions
diff --git a/configmgr/source/valueparser.cxx b/configmgr/source/valueparser.cxx
index a8dad1922df9..9f93cd85dcf1 100644
--- a/configmgr/source/valueparser.cxx
+++ b/configmgr/source/valueparser.cxx
@@ -85,9 +85,10 @@ bool parseValue(xmlreader::Span const & text, sal_Int16 * value) {
rtl_str_shortenedCompareIgnoreAsciiCase_WithLength(
text.begin, text.length, RTL_CONSTASCII_STRINGPARAM("0X"),
RTL_CONSTASCII_LENGTH("0X")) == 0 ?
- OString(
- text.begin + RTL_CONSTASCII_LENGTH("0X"),
- text.length - RTL_CONSTASCII_LENGTH("0X")).toInt32(16) :
+ static_cast< sal_Int32 >(
+ OString(
+ text.begin + RTL_CONSTASCII_LENGTH("0X"),
+ text.length - RTL_CONSTASCII_LENGTH("0X")).toUInt32(16)) :
OString(text.begin, text.length).toInt32();
//TODO: check valid lexical representation
if (n >= SAL_MIN_INT16 && n <= SAL_MAX_INT16) {
@@ -104,9 +105,10 @@ bool parseValue(xmlreader::Span const & text, sal_Int32 * value) {
rtl_str_shortenedCompareIgnoreAsciiCase_WithLength(
text.begin, text.length, RTL_CONSTASCII_STRINGPARAM("0X"),
RTL_CONSTASCII_LENGTH("0X")) == 0 ?
- OString(
- text.begin + RTL_CONSTASCII_LENGTH("0X"),
- text.length - RTL_CONSTASCII_LENGTH("0X")).toInt32(16) :
+ static_cast< sal_Int32 >(
+ OString(
+ text.begin + RTL_CONSTASCII_LENGTH("0X"),
+ text.length - RTL_CONSTASCII_LENGTH("0X")).toUInt32(16)) :
OString(text.begin, text.length).toInt32();
//TODO: check valid lexical representation
return true;
@@ -119,9 +121,10 @@ bool parseValue(xmlreader::Span const & text, sal_Int64 * value) {
rtl_str_shortenedCompareIgnoreAsciiCase_WithLength(
text.begin, text.length, RTL_CONSTASCII_STRINGPARAM("0X"),
RTL_CONSTASCII_LENGTH("0X")) == 0 ?
- OString(
- text.begin + RTL_CONSTASCII_LENGTH("0X"),
- text.length - RTL_CONSTASCII_LENGTH("0X")).toInt64(16) :
+ static_cast< sal_Int64 >(
+ OString(
+ text.begin + RTL_CONSTASCII_LENGTH("0X"),
+ text.length - RTL_CONSTASCII_LENGTH("0X")).toUInt64(16)) :
OString(text.begin, text.length).toInt64();
//TODO: check valid lexical representation
return true;
diff --git a/framework/source/xml/imagesdocumenthandler.cxx b/framework/source/xml/imagesdocumenthandler.cxx
index 5821266c4fbe..253944b39bae 100644
--- a/framework/source/xml/imagesdocumenthandler.cxx
+++ b/framework/source/xml/imagesdocumenthandler.cxx
@@ -233,7 +233,7 @@ throw( SAXException, RuntimeException )
if ( aColor.getStr()[0] == '#' )
{
// the color value is given as #rrggbb and used the hexadecimal system!!
- sal_uInt32 nColor = aColor.copy( 1 ).toInt32( 16 );
+ sal_uInt32 nColor = aColor.copy( 1 ).toUInt32( 16 );
m_pImages->aMaskColor = Color( COLORDATA_RGB( nColor ) );
}
diff --git a/i18npool/source/localedata/localedata.cxx b/i18npool/source/localedata/localedata.cxx
index e4696343960b..c980d2af8faf 100644
--- a/i18npool/source/localedata/localedata.cxx
+++ b/i18npool/source/localedata/localedata.cxx
@@ -1422,7 +1422,7 @@ LocaleData::getOutlineNumberingLevels( const lang::Locale& rLocale ) throw(Runti
case 0: level[j].sPrefix = tmp; break;
case 1: level[j].nNumType = sal::static_int_cast<sal_Int16>(tmp.toInt32()); break;
case 2: level[j].sSuffix = tmp; break;
- case 3: level[j].cBulletChar = sal::static_int_cast<sal_Unicode>(tmp.toInt32(16)); break; // base 16
+ case 3: level[j].cBulletChar = sal::static_int_cast<sal_Unicode>(tmp.toUInt32(16)); break; // base 16
case 4: level[j].sBulletFontName = U2C( tmp ); break;
case 5: level[j].nParentNumbering = sal::static_int_cast<sal_Int16>(tmp.toInt32()); break;
case 6: level[j].nLeftMargin = tmp.toInt32(); break;
diff --git a/include/rtl/string.h b/include/rtl/string.h
index 9cd81aa1552f..28b089b7e16b 100644
--- a/include/rtl/string.h
+++ b/include/rtl/string.h
@@ -743,6 +743,27 @@ SAL_DLLPUBLIC sal_Bool SAL_CALL rtl_str_toBoolean(
SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_str_toInt32(
const sal_Char * str, sal_Int16 radix ) SAL_THROW_EXTERN_C();
+/** Interpret a string as an unsigned integer.
+
+ This function cannot be used for language-specific conversion. The string
+ must be null-terminated.
+
+ @param str
+ a null-terminated string.
+
+ @param radix
+ the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX
+ (36), inclusive.
+
+ @return
+ the unsigned integer value represented by the string, or 0 if the string
+ does not represent an unsigned integer.
+
+ @since LibreOffice 4.2
+ */
+SAL_DLLPUBLIC sal_uInt32 SAL_CALL rtl_str_toUInt32(
+ const sal_Char * str, sal_Int16 radix ) SAL_THROW_EXTERN_C();
+
/** Interpret a string as a long integer.
This function cannot be used for language-specific conversion. The string
diff --git a/include/rtl/string.hxx b/include/rtl/string.hxx
index 9432b7449562..c1cbba9b768c 100644
--- a/include/rtl/string.hxx
+++ b/include/rtl/string.hxx
@@ -1338,6 +1338,23 @@ public:
}
/**
+ Returns the uint32 value from this string.
+
+ This function can't be used for language specific conversion.
+
+ @param radix the radix (between 2 and 36)
+ @return the uint32 represented from this string.
+ 0 if this string represents no number or one of too large
+ magnitude.
+
+ @since LibreOffice 4.2
+ */
+ sal_uInt32 toUInt32( sal_Int16 radix = 10 ) const SAL_THROW(())
+ {
+ return rtl_str_toUInt32( pData->buffer, radix );
+ }
+
+ /**
Returns the int64 value from this string.
This function can't be used for language specific conversion.
diff --git a/include/rtl/ustring.h b/include/rtl/ustring.h
index da6720b3bcf6..8d206512904b 100644
--- a/include/rtl/ustring.h
+++ b/include/rtl/ustring.h
@@ -1073,6 +1073,27 @@ SAL_DLLPUBLIC sal_Bool SAL_CALL rtl_ustr_toBoolean(
SAL_DLLPUBLIC sal_Int32 SAL_CALL rtl_ustr_toInt32(
const sal_Unicode * str, sal_Int16 radix ) SAL_THROW_EXTERN_C();
+/** Interpret a string as an unsigned integer.
+
+ This function cannot be used for language-specific conversion. The string
+ must be null-terminated.
+
+ @param str
+ a null-terminated string.
+
+ @param radix
+ the radix. Must be between RTL_USTR_MIN_RADIX (2) and RTL_USTR_MAX_RADIX
+ (36), inclusive.
+
+ @return
+ the unsigned integer value represented by the string, or 0 if the string
+ does not represent an unsigned integer.
+
+ @since LibreOffice 4.2
+ */
+SAL_DLLPUBLIC sal_uInt32 SAL_CALL rtl_ustr_toUInt32(
+ const sal_Unicode * str, sal_Int16 radix ) SAL_THROW_EXTERN_C();
+
/** Interpret a string as a long integer.
This function cannot be used for language-specific conversion. The string
diff --git a/include/rtl/ustring.hxx b/include/rtl/ustring.hxx
index 112486d3bde2..fedd35ff6c6c 100644
--- a/include/rtl/ustring.hxx
+++ b/include/rtl/ustring.hxx
@@ -1799,6 +1799,23 @@ public:
}
/**
+ Returns the uint32 value from this string.
+
+ This function can't be used for language specific conversion.
+
+ @param radix the radix (between 2 and 36)
+ @return the uint32 represented from this string.
+ 0 if this string represents no number or one of too large
+ magnitude.
+
+ @since LibreOffice 4.2
+ */
+ sal_uInt32 toUInt32( sal_Int16 radix = 10 ) const SAL_THROW(())
+ {
+ return rtl_ustr_toUInt32( pData->buffer, radix );
+ }
+
+ /**
Returns the int64 value from this string.
This function can't be used for language specific conversion.
diff --git a/jvmfwk/source/elements.cxx b/jvmfwk/source/elements.cxx
index f9f481f5e0a2..712939b94e6f 100644
--- a/jvmfwk/source/elements.cxx
+++ b/jvmfwk/source/elements.cxx
@@ -33,6 +33,10 @@
#include "boost/optional.hpp"
#include <string.h>
+// For backwards compatibility, the nFeatures and nRequirements flag words are
+// read/written as potentially signed hexadecimal numbers (though that has no
+// practical relevance given that each has only one flag with value 0x01
+// defined).
using namespace osl;
namespace jfw
diff --git a/odk/examples/cpp/custompanel/ctp_factory.cxx b/odk/examples/cpp/custompanel/ctp_factory.cxx
index 1fb01a5136b2..581e13135479 100644
--- a/odk/examples/cpp/custompanel/ctp_factory.cxx
+++ b/odk/examples/cpp/custompanel/ctp_factory.cxx
@@ -73,7 +73,7 @@ namespace sd { namespace colortoolpanel
throw NoSuchElementException( i_rResourceURL, *this );
const OUString sColor( i_rResourceURL.copy( i_rResourceURL.lastIndexOf( '/' ) + 1 ) );
- const sal_Int32 nPanelColor = sColor.toInt32( 16 );
+ const sal_Int32 nPanelColor = static_cast< sal_Int32 >( sColor.toUInt32( 16 ) );
// retrieve the parent window
Reference< XWindow > xParentWindow;
diff --git a/oox/source/helper/attributelist.cxx b/oox/source/helper/attributelist.cxx
index debd1f8a98c9..2c0eb23fc85f 100644
--- a/oox/source/helper/attributelist.cxx
+++ b/oox/source/helper/attributelist.cxx
@@ -107,7 +107,11 @@ sal_Int64 AttributeConversion::decodeHyper( const OUString& rValue )
sal_Int32 AttributeConversion::decodeIntegerHex( const OUString& rValue )
{
- return rValue.toInt32( 16 );
+ // It looks like all Office Open XML attributes containing hexadecimal
+ // values are based on xsd:hexBinary and so use an unsigned representation:
+ return static_cast< sal_Int32 >(rValue.toUInt32( 16 ));
+ //TODO: Change this function to return sal_uInt32 and get rid of the
+ // cast, but that will have a ripple effect
}
// ============================================================================
diff --git a/oox/source/vml/vmlformatting.cxx b/oox/source/vml/vmlformatting.cxx
index 9be2c6881cee..806c62460b25 100644
--- a/oox/source/vml/vmlformatting.cxx
+++ b/oox/source/vml/vmlformatting.cxx
@@ -205,16 +205,16 @@ Color ConversionHelper::decodeColor( const GraphicHelper& rGraphicHelper,
// RGB colors in the format '#RRGGBB'
if( (aColorName.getLength() == 7) && (aColorName[ 0 ] == '#') )
{
- aDmlColor.setSrgbClr( aColorName.copy( 1 ).toInt32( 16 ) );
+ aDmlColor.setSrgbClr( aColorName.copy( 1 ).toUInt32( 16 ) );
return aDmlColor;
}
// RGB colors in the format '#RGB'
if( (aColorName.getLength() == 4) && (aColorName[ 0 ] == '#') )
{
- sal_Int32 nR = aColorName.copy( 1, 1 ).toInt32( 16 ) * 0x11;
- sal_Int32 nG = aColorName.copy( 2, 1 ).toInt32( 16 ) * 0x11;
- sal_Int32 nB = aColorName.copy( 3, 1 ).toInt32( 16 ) * 0x11;
+ sal_Int32 nR = aColorName.copy( 1, 1 ).toUInt32( 16 ) * 0x11;
+ sal_Int32 nG = aColorName.copy( 2, 1 ).toUInt32( 16 ) * 0x11;
+ sal_Int32 nB = aColorName.copy( 3, 1 ).toUInt32( 16 ) * 0x11;
aDmlColor.setSrgbClr( (nR << 16) | (nG << 8) | nB );
return aDmlColor;
}
diff --git a/sal/qa/rtl/strings/test_strings_toint.cxx b/sal/qa/rtl/strings/test_strings_toint.cxx
index 4a4f549e4495..cf5de4a3b2bf 100644
--- a/sal/qa/rtl/strings/test_strings_toint.cxx
+++ b/sal/qa/rtl/strings/test_strings_toint.cxx
@@ -22,6 +22,7 @@ template< typename T > class Test: public CppUnit::TestFixture {
private:
CPPUNIT_TEST_SUITE(Test);
CPPUNIT_TEST(testToInt32Overflow);
+ CPPUNIT_TEST(testToUInt32Overflow);
CPPUNIT_TEST(testToInt64Overflow);
CPPUNIT_TEST(testToUInt64Overflow);
CPPUNIT_TEST_SUITE_END();
@@ -35,6 +36,12 @@ private:
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), T("2147483648").toInt32());
}
+ void testToUInt32Overflow() {
+ CPPUNIT_ASSERT_EQUAL(SAL_MAX_UINT32 - 1, T("4294967294").toUInt32());
+ CPPUNIT_ASSERT_EQUAL(SAL_MAX_UINT32, T("4294967295").toUInt32());
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), T("4294967296").toUInt32());
+ }
+
void testToInt64Overflow() {
CPPUNIT_ASSERT_EQUAL(sal_Int64(0), T("-9223372036854775809").toInt64());
CPPUNIT_ASSERT_EQUAL(
diff --git a/sal/rtl/strtmpl.cxx b/sal/rtl/strtmpl.cxx
index 78aa1f57b863..dc54945ab6a9 100644
--- a/sal/rtl/strtmpl.cxx
+++ b/sal/rtl/strtmpl.cxx
@@ -999,42 +999,57 @@ sal_Int64 SAL_CALL IMPL_RTL_STRNAME( toInt64 )( const IMPL_RTL_STRCODE* pStr,
}
/* ----------------------------------------------------------------------- */
+namespace {
+ template <typename T> static inline T IMPL_RTL_STRNAME( toUInt )( const IMPL_RTL_STRCODE* pStr,
+ sal_Int16 nRadix )
+ {
+ BOOST_STATIC_ASSERT(!std::numeric_limits<T>::is_signed);
+ sal_Int16 nDigit;
+ T n = 0;
-sal_uInt64 SAL_CALL IMPL_RTL_STRNAME( toUInt64 )( const IMPL_RTL_STRCODE* pStr,
- sal_Int16 nRadix )
- SAL_THROW_EXTERN_C()
-{
- sal_Int16 nDigit;
- sal_uInt64 n = 0;
+ if ( (nRadix < RTL_STR_MIN_RADIX) || (nRadix > RTL_STR_MAX_RADIX) )
+ nRadix = 10;
- if ( (nRadix < RTL_STR_MIN_RADIX) || (nRadix > RTL_STR_MAX_RADIX) )
- nRadix = 10;
+ /* Skip whitespaces */
+ while ( *pStr && rtl_ImplIsWhitespace( IMPL_RTL_USTRCODE( *pStr ) ) )
+ ++pStr;
- /* Skip whitespaces */
- while ( *pStr && rtl_ImplIsWhitespace( IMPL_RTL_USTRCODE( *pStr ) ) )
- ++pStr;
+ // skip optional explicit sign
+ if ( *pStr == '+' )
+ ++pStr;
- // skip optional explicit sign
- if ( *pStr == '+' )
- ++pStr;
+ T nDiv = std::numeric_limits<T>::max() / nRadix;
+ sal_Int16 nMod = std::numeric_limits<T>::max() % nRadix;
+ while ( *pStr )
+ {
+ nDigit = rtl_ImplGetDigit( IMPL_RTL_USTRCODE( *pStr ), nRadix );
+ if ( nDigit < 0 )
+ break;
+ if( ( nMod < nDigit ? nDiv-1 : nDiv ) < n )
+ return 0;
- const sal_uInt64 nDiv = SAL_MAX_UINT64/nRadix;
- const sal_Int16 nMod = SAL_MAX_UINT64%nRadix;
- while ( *pStr )
- {
- nDigit = rtl_ImplGetDigit( IMPL_RTL_USTRCODE( *pStr ), nRadix );
- if ( nDigit < 0 )
- break;
- if( ( nMod < nDigit ? nDiv-1 : nDiv ) < n )
- return 0;
+ n *= nRadix;
+ n += nDigit;
- n *= nRadix;
- n += nDigit;
+ ++pStr;
+ }
- ++pStr;
+ return n;
}
+}
- return n;
+sal_uInt32 SAL_CALL IMPL_RTL_STRNAME( toUInt32 )( const IMPL_RTL_STRCODE* pStr,
+ sal_Int16 nRadix )
+ SAL_THROW_EXTERN_C()
+{
+ return IMPL_RTL_STRNAME( toUInt )<sal_uInt32>(pStr, nRadix);
+}
+
+sal_uInt64 SAL_CALL IMPL_RTL_STRNAME( toUInt64 )( const IMPL_RTL_STRCODE* pStr,
+ sal_Int16 nRadix )
+ SAL_THROW_EXTERN_C()
+{
+ return IMPL_RTL_STRNAME( toUInt )<sal_uInt64>(pStr, nRadix);
}
/* ======================================================================= */
diff --git a/sal/util/sal.map b/sal/util/sal.map
index f2790d506a2e..1456d6db1cf8 100644
--- a/sal/util/sal.map
+++ b/sal/util/sal.map
@@ -664,6 +664,12 @@ LIBO_UDK_4.1 { # symbols available in >= LibO 4.1
rtl_ustr_toUInt64;
} LIBO_UDK_4.0;
+LIBO_UDK_4.2 { # symbols available in >= LibO 4.2
+ global:
+ rtl_str_toUInt32;
+ rtl_ustr_toUInt32;
+} LIBO_UDK_4.1;
+
PRIVATE_1.0 {
global:
osl_detail_ObjectRegistry_storeAddresses;
diff --git a/sc/source/filter/html/htmlpars.cxx b/sc/source/filter/html/htmlpars.cxx
index 584aaeffc5b8..6d93c4e94099 100644
--- a/sc/source/filter/html/htmlpars.cxx
+++ b/sc/source/filter/html/htmlpars.cxx
@@ -2191,7 +2191,7 @@ OUString decodeNumberFormat(const OUString& rFmt)
// Hex-encoded character found. Decode it back into its
// original character. An example of number format with
// hex-encoded chars: "\0022$\0022\#\,\#\#0\.00"
- sal_Int32 nVal = OUString(p1, nDigitCount).toInt32(16);
+ sal_uInt32 nVal = OUString(p1, nDigitCount).toUInt32(16);
aBuf.append(static_cast<sal_Unicode>(nVal));
}
}
diff --git a/sc/source/filter/oox/drawingfragment.cxx b/sc/source/filter/oox/drawingfragment.cxx
index dc047d43d298..c8338a961189 100644
--- a/sc/source/filter/oox/drawingfragment.cxx
+++ b/sc/source/filter/oox/drawingfragment.cxx
@@ -678,14 +678,14 @@ sal_uInt32 VmlDrawing::convertControlTextColor( const OUString& rTextColor ) con
{
// RGB colors in the format '#RRGGBB'
if( rTextColor.getLength() == 7 )
- return OleHelper::encodeOleColor( rTextColor.copy( 1 ).toInt32( 16 ) );
+ return OleHelper::encodeOleColor( rTextColor.copy( 1 ).toUInt32( 16 ) );
// RGB colors in the format '#RGB'
if( rTextColor.getLength() == 4 )
{
- sal_Int32 nR = rTextColor.copy( 1, 1 ).toInt32( 16 ) * 0x11;
- sal_Int32 nG = rTextColor.copy( 2, 1 ).toInt32( 16 ) * 0x11;
- sal_Int32 nB = rTextColor.copy( 3, 1 ).toInt32( 16 ) * 0x11;
+ sal_Int32 nR = rTextColor.copy( 1, 1 ).toUInt32( 16 ) * 0x11;
+ sal_Int32 nG = rTextColor.copy( 2, 1 ).toUInt32( 16 ) * 0x11;
+ sal_Int32 nB = rTextColor.copy( 3, 1 ).toUInt32( 16 ) * 0x11;
return OleHelper::encodeOleColor( (nR << 16) | (nG << 8) | nB );
}
diff --git a/sc/source/filter/oox/pagesettings.cxx b/sc/source/filter/oox/pagesettings.cxx
index 28553dc97a34..fd90cc52477f 100644
--- a/sc/source/filter/oox/pagesettings.cxx
+++ b/sc/source/filter/oox/pagesettings.cxx
@@ -872,7 +872,7 @@ void HeaderFooterParser::convertFontColor( const OUString& rColor )
static_cast< double >( rColor.copy( 2 ).toInt32() ) / 100.0 );
else
// RGB color: RRGGBB
- maFontModel.maColor.setRgb( rColor.toInt32( 16 ) );
+ maFontModel.maColor.setRgb( rColor.toUInt32( 16 ) );
}
void HeaderFooterParser::finalizePortion()
diff --git a/stoc/source/typeconv/convert.cxx b/stoc/source/typeconv/convert.cxx
index 799bae3f8a7e..ec83601e5764 100644
--- a/stoc/source/typeconv/convert.cxx
+++ b/stoc/source/typeconv/convert.cxx
@@ -143,7 +143,7 @@ static sal_Bool getNumericValue( double & rfVal, const OUString & rStr )
}
OUString aHexRest( trim.copy( nX+1 ) );
- sal_Int64 nRet = aHexRest.toInt64( 16 );
+ sal_uInt64 nRet = aHexRest.toUInt64( 16 );
if (nRet == 0)
{
@@ -223,7 +223,7 @@ static sal_Bool getHyperValue( sal_Int64 & rnVal, const OUString & rStr )
}
OUString aHexRest( trim.copy( nX+1 ) );
- sal_Int64 nRet = aHexRest.toInt64( 16 );
+ sal_uInt64 nRet = aHexRest.toUInt64( 16 );
if (nRet == 0)
{
@@ -234,7 +234,7 @@ static sal_Bool getHyperValue( sal_Int64 & rnVal, const OUString & rStr )
}
}
- rnVal = (bNeg ? -nRet : nRet);
+ rnVal = (bNeg ? -static_cast<sal_Int64>(nRet) : nRet);
return sal_True;
}
return sal_False;
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index ae0a1635f5a5..1a3438008369 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -3527,6 +3527,9 @@ const NfCurrencyEntry* SvNumberFormatter::GetCurrencyEntry( bool & bFoundBank,
LanguageType eExtLang;
if ( nExtLen )
{
+ // rExtension should be a 16-bit hex value max FFFF which may contain a
+ // leading "-" separator (that is not a minus sign, but toInt32 can be
+ // used to parse it, with post-processing as necessary):
sal_Int32 nExtLang = rExtension.toInt32( 16 );
if ( !nExtLang )
{
diff --git a/svl/source/passwordcontainer/passwordcontainer.cxx b/svl/source/passwordcontainer/passwordcontainer.cxx
index 8cf17ee186a8..3e9c3b0b9275 100644
--- a/svl/source/passwordcontainer/passwordcontainer.cxx
+++ b/svl/source/passwordcontainer/passwordcontainer.cxx
@@ -118,7 +118,7 @@ static vector< OUString > getInfoFromInd( OUString aInd )
aNum += OUString::valueOf( (sal_Unicode) pLine[i] );
}
- newItem += OUString::valueOf( (sal_Unicode) aNum.toInt32( 16 ) );
+ newItem += OUString::valueOf( (sal_Unicode) aNum.toUInt32( 16 ) );
pLine += 3;
}
@@ -482,7 +482,7 @@ vector< OUString > PasswordContainer::DecodePasswords( const OUString& aLine, co
unsigned char code[RTL_DIGEST_LENGTH_MD5];
for( int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ind++ )
- code[ ind ] = (char)(aMasterPasswd.copy( ind*2, 2 ).toInt32(16));
+ code[ ind ] = (char)(aMasterPasswd.copy( ind*2, 2 ).toUInt32(16));
rtlCipherError result = rtl_cipher_init (
aDecoder, rtl_Cipher_DirectionDecode,
@@ -536,7 +536,7 @@ OUString PasswordContainer::EncodePasswords( vector< OUString > lines, const OUS
unsigned char code[RTL_DIGEST_LENGTH_MD5];
for( int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ind++ )
- code[ ind ] = (char)(aMasterPasswd.copy( ind*2, 2 ).toInt32(16));
+ code[ ind ] = (char)(aMasterPasswd.copy( ind*2, 2 ).toUInt32(16));
rtlCipherError result = rtl_cipher_init (
aEncoder, rtl_Cipher_DirectionEncode,
diff --git a/svx/source/customshapes/EnhancedCustomShape2d.cxx b/svx/source/customshapes/EnhancedCustomShape2d.cxx
index f17e145d2d47..c6bc3971ec7f 100644
--- a/svx/source/customshapes/EnhancedCustomShape2d.cxx
+++ b/svx/source/customshapes/EnhancedCustomShape2d.cxx
@@ -813,7 +813,7 @@ EnhancedCustomShape2d::EnhancedCustomShape2d( SdrObject* pAObj ) :
if( sShapeType.getLength() > 4 &&
sShapeType.match( "col-" ))
{
- nColorData = sShapeType.copy( 4 ).toInt32( 16 );
+ nColorData = sShapeType.copy( 4 ).toUInt32( 16 );
}
}
break;
diff --git a/vcl/generic/fontmanager/fontmanager.cxx b/vcl/generic/fontmanager/fontmanager.cxx
index d3adb503074d..7f2332c066fa 100644
--- a/vcl/generic/fontmanager/fontmanager.cxx
+++ b/vcl/generic/fontmanager/fontmanager.cxx
@@ -2790,7 +2790,7 @@ std::list< sal_Unicode > PrintFontManager::getUnicodeFromAdobeName( const OStri
{
if( rName.getLength() == 7 && rName.indexOf( "uni" ) == 0 )
{
- sal_Unicode aCode = (sal_Unicode)rName.copy( 3 ).toInt32( 16 );
+ sal_Unicode aCode = (sal_Unicode)rName.copy( 3 ).toUInt32( 16 );
aRet.push_back( aCode );
}
}
diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx
index d62966be652a..63f056e57366 100644
--- a/vcl/source/app/settings.cxx
+++ b/vcl/source/app/settings.cxx
@@ -767,7 +767,7 @@ static void setupPersonaHeaderFooter( WhichPersona eWhich, OUString& rHeaderFoot
if ( nIndex > 0 )
{
OUString aColor = aPersonaSettings.getToken( 0, ';', ++nIndex );
- maMenuBarTextColor = Color( aColor.toInt64( 16 ) );
+ maMenuBarTextColor = Color( aColor.toUInt64( 16 ) );
}
}
else if ( aPersona == "default" )
diff --git a/vcl/unx/generic/window/salframe.cxx b/vcl/unx/generic/window/salframe.cxx
index 0ef369e6f4a7..1a2c1667b2b2 100644
--- a/vcl/unx/generic/window/salframe.cxx
+++ b/vcl/unx/generic/window/salframe.cxx
@@ -3028,7 +3028,7 @@ bool X11SalFrame::endUnicodeSequence()
{
// cut the "u"
OUString aNumbers( rSeq.copy( 1 ) );
- sal_Int32 nValue = aNumbers.toInt32( 16 );
+ sal_uInt32 nValue = aNumbers.toUInt32( 16 );
if( nValue >= 32 )
{
sal_uInt16 nTextAttr = EXTTEXTINPUT_ATTR_UNDERLINE;
diff --git a/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx b/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
index b8f5aa3a9787..d77fdebc2674 100644
--- a/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
+++ b/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
@@ -636,7 +636,7 @@ OOXMLHexValue::OOXMLHexValue(sal_uInt32 nValue)
OOXMLHexValue::OOXMLHexValue(const OUString & rValue)
{
- mnValue = static_cast<sal_uInt32>(rValue.toInt32(16));
+ mnValue = rValue.toUInt32(16);
}
OOXMLHexValue::~OOXMLHexValue()
diff --git a/xmloff/source/style/xmlnumfe.cxx b/xmloff/source/style/xmlnumfe.cxx
index 8beeab70abe3..8e0b23b6c8d6 100644
--- a/xmloff/source/style/xmlnumfe.cxx
+++ b/xmloff/source/style/xmlnumfe.cxx
@@ -400,8 +400,11 @@ void SvXMLNumFmtExport::WriteCurrencyElement_Impl( const OUString& rString,
if ( !rExt.isEmpty() )
{
- sal_Int32 nLang = rExt.toInt32(16); // hex
- if ( nLang < 0 ) // extension string may contain "-" separator
+ // rExt should be a 16-bit hex value max FFFF which may contain a
+ // leading "-" separator (that is not a minus sign, but toInt32 can be
+ // used to parse it, with post-processing as necessary):
+ sal_Int32 nLang = rExt.toInt32(16);
+ if ( nLang < 0 )
nLang = -nLang;
AddLanguageAttr_Impl( nLang ); // adds to pAttrList
}
diff --git a/xmlscript/source/xmldlg_imexp/imp_share.hxx b/xmlscript/source/xmldlg_imexp/imp_share.hxx
index d82dffaf8dd1..2df45c0b1ca0 100644
--- a/xmlscript/source/xmldlg_imexp/imp_share.hxx
+++ b/xmlscript/source/xmldlg_imexp/imp_share.hxx
@@ -45,7 +45,7 @@ inline sal_Int32 toInt32( OUString const & rStr ) SAL_THROW(())
{
sal_Int32 nVal;
if (rStr.getLength() > 2 && rStr[ 0 ] == '0' && rStr[ 1 ] == 'x')
- nVal = rStr.copy( 2 ).toInt32( 16 );
+ nVal = rStr.copy( 2 ).toUInt32( 16 );
else
nVal = rStr.toInt32();
return nVal;
diff --git a/xmlscript/source/xmllib_imexp/imp_share.hxx b/xmlscript/source/xmllib_imexp/imp_share.hxx
index bbeeea6bcc31..d0eaf94141a1 100644
--- a/xmlscript/source/xmllib_imexp/imp_share.hxx
+++ b/xmlscript/source/xmllib_imexp/imp_share.hxx
@@ -45,7 +45,7 @@ inline sal_Int32 toInt32( OUString const & rStr ) SAL_THROW(())
sal_Int32 nVal;
if (rStr.getLength() > 2 && rStr[ 0 ] == '0' && rStr[ 1 ] == 'x')
{
- nVal = rStr.copy( 2 ).toInt32( 16 );
+ nVal = rStr.copy( 2 ).toUInt32( 16 );
}
else
{