summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2010-10-07 11:27:28 +0100
committerCaolán McNamara <caolanm@redhat.com>2010-10-07 13:50:04 +0100
commit18a0c690efb286a511276bfc72fd50f6e0ce721d (patch)
treedcdb6ffe9ae95e069b0938577875ff39badd0f0f
parent024ff020cbf451ab8ef77015218c33a7c54f7b08 (diff)
dangling pointer dereference in SwCalc::Str2Double
-rw-r--r--sw/inc/calc.hxx2
-rw-r--r--sw/source/core/bastyp/calc.cxx14
-rw-r--r--sw/source/ui/docvw/AnnotationWin.cxx3
-rw-r--r--sw/source/ui/docvw/SidebarWin.cxx3
-rw-r--r--sw/source/ui/utlui/initui.cxx3
-rw-r--r--sw/source/ui/utlui/uitool.cxx3
6 files changed, 18 insertions, 10 deletions
diff --git a/sw/inc/calc.hxx b/sw/inc/calc.hxx
index f5cbcc6c8c38..74c785c88e83 100644
--- a/sw/inc/calc.hxx
+++ b/sw/inc/calc.hxx
@@ -28,6 +28,7 @@
#define _CALC_HXX
#include <svl/svarray.hxx>
+#include <unotools/syslocale.hxx>
#ifndef __SBX_SBXVALUE //autogen
#include <basic/sbxvar.hxx>
@@ -185,6 +186,7 @@ class SwCalc
xub_StrLen nCommandPos;
SwDoc& rDoc;
+ SvtSysLocale m_aSysLocale;
const LocaleDataWrapper* pLclData;
CharClass* pCharClass;
diff --git a/sw/source/core/bastyp/calc.cxx b/sw/source/core/bastyp/calc.cxx
index c39fa21069a4..f412f141349b 100644
--- a/sw/source/core/bastyp/calc.cxx
+++ b/sw/source/core/bastyp/calc.cxx
@@ -267,7 +267,7 @@ SwCalc::SwCalc( SwDoc& rD )
:
aErrExpr( aEmptyStr, SwSbxValue(), 0 ),
rDoc( rD ),
- pLclData( &SvtSysLocale().GetLocaleData() ),
+ pLclData( m_aSysLocale.GetLocaleDataPtr() ),
pCharClass( &GetAppCharClass() ),
nListPor( 0 ),
eError( CALC_NOERR )
@@ -416,7 +416,7 @@ SwCalc::~SwCalc()
{
for( USHORT n = 0; n < TBLSZ; ++n )
delete VarTable[n];
- if( pLclData != &SvtSysLocale().GetLocaleData() )
+ if( pLclData != m_aSysLocale.GetLocaleDataPtr() )
delete pLclData;
if( pCharClass != &GetAppCharClass() )
delete pCharClass;
@@ -1614,9 +1614,10 @@ String SwCalc::GetDBName(const String& rName)
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;
@@ -1628,7 +1629,7 @@ BOOL SwCalc::Str2Double( const String& rCommand, xub_StrLen& rCommandPos,
&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;
@@ -1637,7 +1638,8 @@ BOOL SwCalc::Str2Double( const String& rCommand, xub_StrLen& rCommandPos,
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 )
{
@@ -1658,7 +1660,7 @@ BOOL SwCalc::Str2Double( const String& rCommand, xub_StrLen& rCommandPos,
&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;
diff --git a/sw/source/ui/docvw/AnnotationWin.cxx b/sw/source/ui/docvw/AnnotationWin.cxx
index 91ea1e13b077..08fb91dcc3c6 100644
--- a/sw/source/ui/docvw/AnnotationWin.cxx
+++ b/sw/source/ui/docvw/AnnotationWin.cxx
@@ -208,7 +208,8 @@ void SwAnnotationWin::InitAnswer(OutlinerParaObject* pText)
{
//collect our old meta data
SwSidebarWin* pWin = Mgr().GetNextPostIt(KEY_PAGEUP, this);
- const LocaleDataWrapper& rLocalData = SvtSysLocale().GetLocaleData();
+ const SvtSysLocale aSysLocale;
+ const LocaleDataWrapper& rLocalData = aSysLocale.GetLocaleData();
String aText = String(SW_RES(STR_REPLY));
SwRewriter aRewriter;
aRewriter.AddRule(UNDO_ARG1, pWin->GetAuthor());
diff --git a/sw/source/ui/docvw/SidebarWin.cxx b/sw/source/ui/docvw/SidebarWin.cxx
index dc4f006e2026..884409826362 100644
--- a/sw/source/ui/docvw/SidebarWin.cxx
+++ b/sw/source/ui/docvw/SidebarWin.cxx
@@ -389,7 +389,8 @@ void SwSidebarWin::InitControls()
void SwSidebarWin::CheckMetaText()
{
- const LocaleDataWrapper& rLocalData = SvtSysLocale().GetLocaleData();
+ const SvtSysLocale aSysLocale;
+ const LocaleDataWrapper& rLocalData = aSysLocale.GetLocaleData();
String sMeta = GetAuthor();
if (sMeta.Len() == 0)
{
diff --git a/sw/source/ui/utlui/initui.cxx b/sw/source/ui/utlui/initui.cxx
index 11758709ece0..d2e4cc8f02f8 100644
--- a/sw/source/ui/utlui/initui.cxx
+++ b/sw/source/ui/utlui/initui.cxx
@@ -252,7 +252,8 @@ ImpAutoFmtNameListLoader::ImpAutoFmtNameListLoader( SvStringsDtor& rLst )
p->SearchAndReplace(C2S("%1"), C2S(",,"));
p->SearchAndReplace(C2S("%2"), C2S("''"));
#else
- const LocaleDataWrapper& rLclD = SvtSysLocale().GetLocaleData();
+ const SvtSysLocale aSysLocale;
+ const LocaleDataWrapper& rLclD = aSysLocale.GetLocaleData();
//unter richtigen Betriebssystemen funktioniert es auch so
p->SearchAndReplace(C2S("%1"), rLclD.getDoubleQuotationMarkStart());
p->SearchAndReplace(C2S("%2"), rLclD.getDoubleQuotationMarkEnd());
diff --git a/sw/source/ui/utlui/uitool.cxx b/sw/source/ui/utlui/uitool.cxx
index e71e02b762b7..a557a2f1048b 100644
--- a/sw/source/ui/utlui/uitool.cxx
+++ b/sw/source/ui/utlui/uitool.cxx
@@ -714,7 +714,8 @@ SwTwips GetTableWidth( SwFrmFmt* pFmt, SwTabCols& rCols, USHORT *pPercent,
String GetAppLangDateTimeString( const DateTime& rDT )
{
- const LocaleDataWrapper& rAppLclData = SvtSysLocale().GetLocaleData();
+ const SvtSysLocale aSysLocale;
+ const LocaleDataWrapper& rAppLclData = aSysLocale.GetLocaleData();
String sRet( rAppLclData.getDate( rDT ));
( sRet += ' ' ) += rAppLclData.getTime( rDT, FALSE, FALSE );
return sRet;