# HG changeset patch # Parent b682cbb775c33b3969bce1d52e4b0164b42c1bb6 #i114409# prevent deref. of dangling ptr if there is no other instance of SvtSysLocale hanging around somewhere diff -r b682cbb775c3 sw/source/core/bastyp/calc.cxx --- a/sw/source/core/bastyp/calc.cxx Tue Aug 17 14:47:10 2010 +0200 +++ b/sw/source/core/bastyp/calc.cxx Wed Sep 08 14:22:51 2010 +0200 @@ -1620,9 +1620,10 @@ BOOL SwCalc::Str2Double( const String& rCommand, xub_StrLen& rCommandPos, double& rVal, const LocaleDataWrapper* pLclData ) { + const SvtSysLocale aSysLocale; const LocaleDataWrapper* pLclD = pLclData; if( !pLclD ) - pLclD = &SvtSysLocale().GetLocaleData(); + pLclD = aSysLocale.GetLocaleDataPtr(); const xub_Unicode nCurrCmdPos = rCommandPos; rtl_math_ConversionStatus eStatus; @@ -1634,7 +1635,7 @@ &eStatus, &pEnd ); rCommandPos = static_cast<xub_StrLen>(pEnd - rCommand.GetBuffer()); - if( !pLclData && pLclD != &SvtSysLocale().GetLocaleData() ) + if( !pLclData && pLclD != &aSysLocale.GetLocaleData() ) delete (LocaleDataWrapper*)pLclD; return rtl_math_ConversionStatus_Ok == eStatus && nCurrCmdPos != rCommandPos; @@ -1643,7 +1644,8 @@ BOOL SwCalc::Str2Double( const String& rCommand, xub_StrLen& rCommandPos, double& rVal, SwDoc* pDoc ) { - const LocaleDataWrapper* pLclD = &SvtSysLocale().GetLocaleData(); + const SvtSysLocale aSysLocale; + const LocaleDataWrapper* pLclD = aSysLocale.GetLocaleDataPtr(); if( pDoc ) { @@ -1664,7 +1666,7 @@ &eStatus, &pEnd ); rCommandPos = static_cast<xub_StrLen>(pEnd - rCommand.GetBuffer()); - if( pLclD != &SvtSysLocale().GetLocaleData() ) + if( pLclD != &aSysLocale.GetLocaleData() ) delete (LocaleDataWrapper*)pLclD; return rtl_math_ConversionStatus_Ok == eStatus && nCurrCmdPos != rCommandPos;