[Libreoffice-commits] core.git: 2 commits - sc/source svx/source
Eike Rathke
erack at redhat.com
Thu Jan 29 13:34:46 PST 2015
sc/source/ui/sidebar/AlignmentPropertyPanel.cxx | 31 ++++++++++++++++----
svx/source/sidebar/possize/PosSizePropertyPanel.cxx | 28 ++++++++++--------
2 files changed, 42 insertions(+), 17 deletions(-)
New commits:
commit 1884c0bbd40f0ded41d7a1656cb64fb1f6368c36
Author: Eike Rathke <erack at redhat.com>
Date: Thu Jan 29 17:14:51 2015 +0100
parse with locale decimal separator, tdf#88740 related
And use a proper string to double conversion and early bail out
conditions.
Change-Id: I6c89dd850405ad74ebd175800131cdcac19a8c86
diff --git a/sc/source/ui/sidebar/AlignmentPropertyPanel.cxx b/sc/source/ui/sidebar/AlignmentPropertyPanel.cxx
index 80b103e..4d03553 100644
--- a/sc/source/ui/sidebar/AlignmentPropertyPanel.cxx
+++ b/sc/source/ui/sidebar/AlignmentPropertyPanel.cxx
@@ -113,16 +113,35 @@ void AlignmentPropertyPanel::Initialize()
IMPL_LINK( AlignmentPropertyPanel, AngleModifiedHdl, void *, EMPTYARG )
{
OUString sTmp = mpMtrAngle->GetText();
+ if (sTmp.isEmpty())
+ return 0;
+ sal_Unicode nChar = sTmp[0];
+ if( nChar == '-' )
+ {
+ if (sTmp.getLength() < 2)
+ return 0;
+ nChar = sTmp[1];
+ }
+
+ if( (nChar < '0') || (nChar > '9') )
+ return 0;
- sal_Unicode nChar = sTmp.isEmpty() ? 0 : sTmp[0];
- if((sTmp.getLength()== 1 && nChar == '-') ||
- (nChar != '-' && ((nChar < '0') || (nChar > '9') ) )) ////modify
+ const LocaleDataWrapper& rLocaleWrapper( Application::GetSettings().GetLocaleDataWrapper() );
+ const sal_Unicode cSep = rLocaleWrapper.getNumDecimalSep()[0];
+
+ // 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;
- double dTmp = sTmp.toDouble();
- FormatDegrees(dTmp);
+ FormatDegrees(fTmp);
- sal_Int64 nTmp = (sal_Int64)dTmp*100;
+ sal_Int64 nTmp = (sal_Int64)fTmp*100;
SfxInt32Item aAngleItem( SID_ATTR_ALIGN_DEGREES,(sal_uInt32) nTmp);
GetBindings()->GetDispatcher()->Execute(
commit 3ba5ac834780fc2565aff99e42dd8c3b2202fba3
Author: Eike Rathke <erack at redhat.com>
Date: Thu Jan 29 17:04:48 2015 +0100
use a less ugly string to double conversion, tdf#88740 follow-up
And check string length before accessing characters..
Change-Id: Iac3c2bf2f67f0cc7fc106515a875512771676e01
diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
index 63de7bb..6f6dceb 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);
More information about the Libreoffice-commits
mailing list