[Libreoffice-commits] core.git: svl/source xmloff/source

2022-12-18 Thread Caolán McNamara (via logerrit)
 svl/source/numbers/zforlist.cxx  |5 -
 xmloff/source/style/xmlnumfe.cxx |3 ++-
 2 files changed, 6 insertions(+), 2 deletions(-)

New commits:
commit 68809ffde7d50a5f47afa5a1235025513762df8c
Author: Caolán McNamara 
AuthorDate: Fri Dec 16 11:29:56 2022 +
Commit: Caolán McNamara 
CommitDate: Sun Dec 18 10:41:30 2022 +

crashtesting: assert seen with forum-mso-en4-747641.xlsx with LCID F6E0B

see on export to ods

input .xlsx contains a LCID of F6E0B



Change-Id: I543164dba4cc8b1c86508a3e3e39b43900c06484
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144321
Tested-by: Jenkins
Reviewed-by: Caolán McNamara 

diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index c43e124bbadd..cee75fc9265e 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -3991,7 +3991,10 @@ const NfCurrencyEntry* 
SvNumberFormatter::GetCurrencyEntry( bool & bFoundBank,
 }
 else
 {
-eExtLang = LanguageType((nExtLang < 0) ? -nExtLang : nExtLang);
+if (nExtLang < 0)
+nExtLang = -nExtLang;
+SAL_WARN_IF(nExtLang > 0x, "svl.numbers", "Out of range Lang 
Id: " << nExtLang << " from input string: " << OUString(rExtension));
+eExtLang = LanguageType(nExtLang & 0x);
 }
 }
 else
diff --git a/xmloff/source/style/xmlnumfe.cxx b/xmloff/source/style/xmlnumfe.cxx
index a2938b1d998d..01367fe12e55 100644
--- a/xmloff/source/style/xmlnumfe.cxx
+++ b/xmloff/source/style/xmlnumfe.cxx
@@ -362,7 +362,8 @@ void SvXMLNumFmtExport::WriteCurrencyElement_Impl( const 
OUString& rString,
 sal_Int32 nLang = o3tl::toInt32(rExt, 16);
 if ( nLang < 0 )
 nLang = -nLang;
-AddLanguageAttr_Impl( LanguageType(nLang) );  // adds to 
pAttrList
+SAL_WARN_IF(nLang > 0x, "xmloff.style", "Out of range Lang Id: " 
<< nLang << " from input string: " << OUString(rExt));
+AddLanguageAttr_Impl( LanguageType(nLang & 0x) );  // adds 
to pAttrList
 }
 
 SvXMLElementExport aElem( rExport,


[Libreoffice-commits] core.git: svl/source xmloff/source

2016-10-07 Thread Laurent Balland-Poirier
 svl/source/numbers/zformat.cxx   |7 +--
 xmloff/source/style/xmlnumfe.cxx |5 +++--
 2 files changed, 8 insertions(+), 4 deletions(-)

New commits:
commit 4b81e61682e7af2af0c00c0a267d4a1f267c45f1
Author: Laurent Balland-Poirier 
Date:   Thu Sep 22 22:04:38 2016 +0200

tdf#102370 Correctly export to Excel exponent without sign

Exponent without sign in scientific notation is coded in Excel with a minus
sign replacing plus sign: 0.00E-00 for instance
This format is already correctly treated in Calc but was not correctly
exported to Excel or ODF

Change-Id: Ide117b04e0eb887c6cdd6699ae8ec723d1d29d50
Reviewed-on: https://gerrit.libreoffice.org/29198
Tested-by: Jenkins 
Reviewed-by: Eike Rathke 

diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx
index 17583d4..f4b7834 100644
--- a/svl/source/numbers/zformat.cxx
+++ b/svl/source/numbers/zformat.cxx
@@ -4806,9 +4806,12 @@ OUString SvNumberformat::GetMappedFormatstring( const 
NfKeywordTable& rKeywords,
 aStr.append( rLocWrp.getNumThousandSep() );
 break;
 case NF_SYMBOLTYPE_EXP :
-// tdf#95677: Excel does not support exponent without 
sign
 aStr.append( rKeywords[NF_KEY_E] );
-aStr.append( "+" );
+if ( pStr[j].getLength() > 1 && pStr[j][1] == '+' )
+aStr.append( "+" );
+else
+// tdf#102370: Excel code for exponent without sign
+aStr.append( "-" );
 break;
 case NF_SYMBOLTYPE_DATESEP :
 aStr.append( rLocWrp.getDateSep() );
diff --git a/xmloff/source/style/xmlnumfe.cxx b/xmloff/source/style/xmlnumfe.cxx
index f449331..3790e79 100644
--- a/xmloff/source/style/xmlnumfe.cxx
+++ b/xmloff/source/style/xmlnumfe.cxx
@@ -1321,8 +1321,9 @@ void SvXMLNumFmtExport::ExportPart_Impl( const 
SvNumberformat& rFormat, sal_uInt
 case NF_SYMBOLTYPE_EXP:
 bExpFound = true;   // following digits are 
exponent digits
 bInInteger = false;
-if ( pElemStr && pElemStr->getLength() == 1 )
-bExpSign = false;   // for 0.00E0
+if ( pElemStr && ( pElemStr->getLength() == 1
+  || ( pElemStr->getLength() == 2 && 
(*pElemStr)[1] == '-' ) ) )
+bExpSign = false;   // for 0.00E0 or 0.00E-00
 break;
 case NF_SYMBOLTYPE_CURRENCY:
 bCurrFound = true;
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: svl/source xmloff/source

2016-07-15 Thread Laurent Balland-Poirier
 svl/source/numbers/zformat.cxx   |   16 +++-
 svl/source/numbers/zforscan.cxx  |4 
 xmloff/source/style/xmlnumfe.cxx |5 +++--
 3 files changed, 14 insertions(+), 11 deletions(-)

New commits:
commit d32dab699f6584a13eb10fc1eb2801423ef52fb2
Author: Laurent Balland-Poirier 
Date:   Wed Jul 6 00:10:38 2016 +0200

tdf#100755 Allow '0' for denominator symbol

Fraction number format
Accept '0' in numerator and denominator format: 0 0/0
Represent integer 3 as: 3 0/1
Load and save format to Excel
As it cannot (yet) be saved in ODF, replace 0 by ? during save to ODF

Change-Id: I4721a751431d3f9b903b369d199146ddfb76b43d
Reviewed-on: https://gerrit.libreoffice.org/27062
Reviewed-by: Eike Rathke 
Tested-by: Eike Rathke 

diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx
index 1350525..f3321da 100644
--- a/svl/source/numbers/zformat.cxx
+++ b/svl/source/numbers/zformat.cxx
@@ -2499,11 +2499,15 @@ bool SvNumberformat::ImpGetFractionOutput(double 
fNumber,
 sStr.appendAscii( aBuf );
 impTransliterate(sStr, NumFor[nIx].GetNatNum());
 }
-if (rInfo.nCntPre > 0 && nFrac == 0)
+bool bHideFraction = (rInfo.nCntPre > 0 && nFrac == 0
+&& (lcl_GetNumeratorString(rInfo, nAnz).indexOf('0') < 
0)
+&& (lcl_GetDenominatorString(rInfo, nAnz).indexOf('0') 
< 0
+|| lcl_GetDenominatorString(rInfo, nAnz).toInt32() 
> 0) );
+if ( bHideFraction )
 {
 sDiv.truncate();
 }
-else
+else  // if there are some '0' in format, force display of fraction
 {
 sFrac = ImpIntToString( nIx, nFrac );
 sDiv = ImpIntToString( nIx, nDiv );
@@ -2517,7 +2521,7 @@ bool SvNumberformat::ImpGetFractionOutput(double fNumber,
 bool bCont = true;
 if (rInfo.nTypeArray[j] == NF_SYMBOLTYPE_FRAC)
 {
-if (rInfo.nCntPre > 0 && nFrac == 0)
+if ( bHideFraction )
 {
 sDiv.insert(0, ' ');
 }
@@ -4306,8 +4310,10 @@ void SvNumberformat::GetNumForInfo( sal_uInt16 nNumFor, 
short& rScannedType,
 nAnzLeading++;
 }
 }
-else if (nType == NF_SYMBOLTYPE_DECSEP || nType == 
NF_SYMBOLTYPE_EXP)
-{
+else if (nType == NF_SYMBOLTYPE_DECSEP
+  || nType == NF_SYMBOLTYPE_EXP
+  || nType == NF_SYMBOLTYPE_FRACBLANK)  // Fraction: stop 
after integer part,
+{   // do not count '0' of 
fraction
 bStop = true;
 }
 i++;
diff --git a/svl/source/numbers/zforscan.cxx b/svl/source/numbers/zforscan.cxx
index 8025ae6..1e4ba47 100644
--- a/svl/source/numbers/zforscan.cxx
+++ b/svl/source/numbers/zforscan.cxx
@@ -1740,10 +1740,6 @@ sal_Int32 ImpSvNumberformatScan::FinalScan( OUString& 
rString )
 {
 return nPos;// Error
 }
-else if (bFrac && cHere == '0')
-{
-return nPos;// Denominator is 0
-}
 nTypeArray[i] = NF_SYMBOLTYPE_DIGIT;
 nPos = nPos + rStr.getLength();
 i++;
diff --git a/xmloff/source/style/xmlnumfe.cxx b/xmloff/source/style/xmlnumfe.cxx
index 3fd0d5c..70ac995 100644
--- a/xmloff/source/style/xmlnumfe.cxx
+++ b/xmloff/source/style/xmlnumfe.cxx
@@ -731,13 +731,14 @@ void SvXMLNumFmtExport::WriteFractionElement_Impl(
 {
 FinishTextElement_Impl();
 sal_Int32 nMaxNumeratorDigits = aNumeratorString.getLength();
-sal_Int32 nMinNumeratorDigits = aNumeratorString.indexOf('?');
+// As '0' cannot (yet) be saved in extended ODF, replace them by '?'
+sal_Int32 nMinNumeratorDigits = 
aNumeratorString.replaceAll("0","?").indexOf('?');
 if ( nMinNumeratorDigits >= 0 )
 nMinNumeratorDigits = nMaxNumeratorDigits - nMinNumeratorDigits;
 else
 nMinNumeratorDigits = 0;
 sal_Int32 nMaxDenominatorDigits = aDenominatorString.getLength();
-sal_Int32 nMinDenominatorDigits = aDenominatorString.indexOf('?');
+sal_Int32 nMinDenominatorDigits = 
aDenominatorString.replaceAll("0","?").indexOf('?');
 if ( nMinDenominatorDigits >= 0 )
 nMinDenominatorDigits = nMaxDenominatorDigits - nMinDenominatorDigits;
 else
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: svl/source xmloff/source

2016-05-30 Thread Eike Rathke
 svl/source/numbers/zformat.cxx   |   22 --
 xmloff/source/style/xmlnumfe.cxx |5 +++--
 2 files changed, 15 insertions(+), 12 deletions(-)

New commits:
commit c75ce37560c05271ba56c9dd0d98c5001e83cc2f
Author: Eike Rathke 
Date:   Tue May 31 00:02:38 2016 +0200

prevent out of bounds string access

Yet another reminiscence of String to OUString conversion..
where the terminating NULL-character was obtained and
SvNumberformat::InsertBlanks() effectively did nothing.

Could be triggered already by entering an '_' underscore character as
number format code, which is a place holder for blanks of the same width
as the following character, which there isn't then yet.

Change-Id: I0534e1417d4bd35e9e7ed4bd0170b9ea3b5fb575

diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx
index 2f2d412..172f8021 100644
--- a/svl/source/numbers/zformat.cxx
+++ b/svl/source/numbers/zformat.cxx
@@ -1926,8 +1926,8 @@ void SvNumberformat::GetOutputString(const OUString& 
sString,
 }
 break;
 case NF_SYMBOLTYPE_BLANK:
-InsertBlanks( sOutBuff, sOutBuff.getLength(),
-  rInfo.sStrArray[i][1] );
+if (rInfo.sStrArray[i].getLength() >= 2)
+InsertBlanks( sOutBuff, sOutBuff.getLength(), 
rInfo.sStrArray[i][1] );
 break;
 case NF_KEY_GENERAL :   // #77026# "General" is the same as "@"
 case NF_SYMBOLTYPE_DEL :
@@ -2267,8 +2267,8 @@ bool SvNumberformat::GetOutputString(double fNumber,
 }
 break;
 case NF_SYMBOLTYPE_BLANK:
-InsertBlanks(sBuff, sBuff.getLength(),
- rInfo.sStrArray[i][1] );
+if (rInfo.sStrArray[i].getLength() >= 2)
+InsertBlanks(sBuff, sBuff.getLength(), 
rInfo.sStrArray[i][1] );
 break;
 case NF_SYMBOLTYPE_STRING:
 case NF_SYMBOLTYPE_CURRENCY:
@@ -2899,8 +2899,8 @@ bool SvNumberformat::ImpGetTimeOutput(double fNumber,
 }
 break;
 case NF_SYMBOLTYPE_BLANK:
-InsertBlanks(sBuff, sBuff.getLength(),
- rInfo.sStrArray[i][1] );
+if (rInfo.sStrArray[i].getLength() >= 2)
+InsertBlanks(sBuff, sBuff.getLength(), rInfo.sStrArray[i][1] );
 break;
 case NF_SYMBOLTYPE_STRING:
 case NF_SYMBOLTYPE_CURRENCY:
@@ -3395,7 +3395,8 @@ bool SvNumberformat::ImpGetDateOutput(double fNumber,
 }
 break;
 case NF_SYMBOLTYPE_BLANK:
-InsertBlanks( sBuff, sBuff.getLength(), rInfo.sStrArray[i][1] );
+if (rInfo.sStrArray[i].getLength() >= 2)
+InsertBlanks( sBuff, sBuff.getLength(), rInfo.sStrArray[i][1] 
);
 break;
 case NF_SYMBOLTYPE_STRING:
 case NF_SYMBOLTYPE_CURRENCY:
@@ -3688,8 +3689,8 @@ bool SvNumberformat::ImpGetDateTimeOutput(double fNumber,
 }
 break;
 case NF_SYMBOLTYPE_BLANK:
-InsertBlanks( sBuff, sBuff.getLength(),
-  rInfo.sStrArray[i][1] );
+if (rInfo.sStrArray[i].getLength() >= 2)
+InsertBlanks( sBuff, sBuff.getLength(), rInfo.sStrArray[i][1] 
);
 break;
 case NF_SYMBOLTYPE_STRING:
 case NF_SYMBOLTYPE_CURRENCY:
@@ -4335,7 +4336,8 @@ bool SvNumberformat::ImpNumberFill( OUStringBuffer& 
sBuff, // number string
 }
 break;
 case NF_SYMBOLTYPE_BLANK:
-k = InsertBlanks(sBuff, k, rInfo.sStrArray[j][1] );
+if (rInfo.sStrArray[j].getLength() >= 2)
+k = InsertBlanks(sBuff, k, rInfo.sStrArray[j][1] );
 break;
 case NF_SYMBOLTYPE_THSEP:
 // Same as in ImpNumberFillWithThousands() above, do not insert
diff --git a/xmloff/source/style/xmlnumfe.cxx b/xmloff/source/style/xmlnumfe.cxx
index 235920d..121a381 100644
--- a/xmloff/source/style/xmlnumfe.cxx
+++ b/xmloff/source/style/xmlnumfe.cxx
@@ -1347,7 +1347,7 @@ void SvXMLNumFmtExport::ExportPart_Impl( const 
SvNumberformat& rFormat, sal_uInt
 {
 aEmbeddedStr = *pElemStr;
 }
-else
+else if (pElemStr->getLength() >= 2)
 {
 SvNumberformat::InsertBlanks( aEmbeddedStr, 0, 
(*pElemStr)[1] );
 }
@@ -1419,7 +1419,8 @@ void SvXMLNumFmtExport::ExportPart_Impl( const 
SvNumberformat& rFormat, sal_uInt
 //  (#i20396# the spaces may also be in embedded-text 
elements)
 
 OUString aBlanks;
-SvNumberformat::InsertBlanks( aBlanks, 0, 
(