[Libreoffice-commits] core.git: svl/source xmloff/source
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
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
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
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, (