diff options
author | Eike Rathke <erack@redhat.com> | 2015-01-29 17:04:48 +0100 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2015-01-29 22:33:53 +0100 |
commit | 3ba5ac834780fc2565aff99e42dd8c3b2202fba3 (patch) | |
tree | d8d1cb983ecf196a476c7183862a9f5a78d42b67 /svx | |
parent | c0117fcb3dbd6c2a8d5e7679ee8d6fb29264ff6b (diff) |
use a less ugly string to double conversion, tdf#88740 follow-up
And check string length before accessing characters..
Change-Id: Iac3c2bf2f67f0cc7fc106515a875512771676e01
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/sidebar/possize/PosSizePropertyPanel.cxx | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx index 63de7bb25118..6f6dceb6a62b 100644 --- a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx +++ b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx @@ -477,12 +477,13 @@ IMPL_LINK( PosSizePropertyPanel, ClickAutoHdl, void *, EMPTYARG ) IMPL_LINK( PosSizePropertyPanel, AngleModifiedHdl, void *, EMPTYARG ) { OUString sTmp = mpMtrAngle->GetText(); - bool bNegative = false; + if (sTmp.isEmpty()) + return 0; sal_Unicode nChar = sTmp[0]; - if( nChar == '-' ) { - bNegative = true; + if (sTmp.getLength() < 2) + return 0; nChar = sTmp[1]; } @@ -492,15 +493,20 @@ IMPL_LINK( PosSizePropertyPanel, AngleModifiedHdl, void *, EMPTYARG ) const LocaleDataWrapper& rLocaleWrapper( Application::GetSettings().GetLocaleDataWrapper() ); const sal_Unicode cSep = rLocaleWrapper.getNumDecimalSep()[0]; - sTmp = sTmp.replace(cSep,'.'); // toDouble() expects decimal point + // Do not check that the entire string was parsed up to its end, there may + // be a degree symbol following the number. Note that this also means that + // the number recognized just stops at any non-matching character. + /* TODO: we could check for the degree symbol stop if there are no other + * cases with different symbol characters in any language? */ + rtl_math_ConversionStatus eStatus; + double fTmp = rtl::math::stringToDouble( sTmp, cSep, 0, &eStatus); + if (eStatus != rtl_math_ConversionStatus_Ok) + return 0; + + while (fTmp < 0) + fTmp += 360; - double dTmp = sTmp.toDouble(); - if(bNegative) - { - while(dTmp<0) - dTmp += 360; - } - sal_Int64 nTmp = dTmp*100; + sal_Int64 nTmp = fTmp*100; // #i123993# Need to take UIScale into account when executing rotations const double fUIScale(mpView && mpView->GetModel() ? double(mpView->GetModel()->GetUIScale()) : 1.0); |