[Libreoffice-commits] core.git: Branch 'libreoffice-4-2' - sax/source
Stephan Bergmann
sbergman at redhat.com
Tue Dec 17 08:37:56 PST 2013
sax/source/tools/converter.cxx | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
New commits:
commit 5bffe4dffd7496057c1fd70e46af800396f5b346
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Tue Dec 17 16:46:17 2013 +0100
Avoid inaccurate floating-point computations
...otherwise at least my --disable-dbgutil --disable-debug Linux x86_64 build
failed the CppunitTest_sax_cpputest with 8999999 vs. 9000000 nanoseconds.
(cherry picked from commit 695671eb18674ea58103093b9cf31a31afe8d2fd,
incorporating follow-up fixes 71448690d7c5904df45bf98243c5bb05a99245e5
"readUnsignedNumberMaxDigits can read more than maxDigits chars" and
b9bcc9c5c10841dcdfa9ff5814344ce667678df3 "...and nDigits > 9 is harmless in
following for loop and need not be capped")
Change-Id: I05e0febf413f9f9e01227a0cc4e0f46a5243fe61
diff --git a/sax/source/tools/converter.cxx b/sax/source/tools/converter.cxx
index 8823965..02131ed 100644
--- a/sax/source/tools/converter.cxx
+++ b/sax/source/tools/converter.cxx
@@ -1122,9 +1122,13 @@ bool Converter::convertDuration(util::Duration& rDuration,
{
if (-1 != nTemp)
{
- const sal_Int32 nDigits = std::min<sal_Int32>(nPos - nStart, 9);
- OSL_ENSURE(nDigits > 0, "bad code monkey: negative digits");
- nNanoSeconds=static_cast<double>(nTemp)*(1000000000.0/pow(10.0,nDigits));
+ nNanoSeconds = nTemp;
+ sal_Int32 nDigits = nPos - nStart;
+ assert(nDigits >= 0);
+ for (; nDigits < 9; ++nDigits)
+ {
+ nNanoSeconds *= 10;
+ }
nTemp=-1;
if ('S' == string[nPos])
{
More information about the Libreoffice-commits
mailing list