sw/source/filter/html/svxcss1.cxx |    9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

New commits:
commit 547c8a8a8935204bed319b959dd040d6413bdf74
Author:     Stephan Bergmann <sberg...@redhat.com>
AuthorDate: Thu Jun 13 20:21:20 2019 +0200
Commit:     Stephan Bergmann <sberg...@redhat.com>
CommitDate: Thu Jun 13 22:17:46 2019 +0200

    Avoid -fsanitize=float-cast-overflow
    
    ...as happens when loading xhtml/kde143045-4.xhtml as obtained via
    bin/get-bugzilla-attachments-by-mimetype (i.e., the attachment at
    <https://bugs.kde.org/show_bug.cgi?id=143045#c4>):
    
    > sw/source/filter/html/svxcss1.cxx:1424:60: runtime error: -5000 is 
outside the range of representable values of type 'unsigned long'
    >  #0 in ParseCSS1_background(CSS1Expression const*, SfxItemSet&, 
SvxCSS1PropertyInfo&, SvxCSS1Parser const&) at 
sw/source/filter/html/svxcss1.cxx:1424:60
    >  #1 in SvxCSS1Parser::DeclarationParsed(rtl::OUString const&, 
std::unique_ptr<CSS1Expression, std::default_delete<CSS1Expression> >) at 
sw/source/filter/html/svxcss1.cxx:3156:9
    >  #2 in CSS1Parser::ParseRule() at sw/source/filter/html/parcss1.cxx:774:5
    >  #3 in CSS1Parser::ParseStyleSheet() at 
sw/source/filter/html/parcss1.cxx:719:13
    
    Conversion to integral type (which truncates) was always there at least 
since
    7b0b5cdfeed656b279bc32cd929630d5fc25878b "initial import".  It is unclear 
to me
    whether that's really relevant or wanted, but lets keep that behavior with 
an
    explicit std::trunc.
    
    Change-Id: Ib3b99a89e460850a992b403982e2797d24eee65b
    Reviewed-on: https://gerrit.libreoffice.org/73980
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sberg...@redhat.com>

diff --git a/sw/source/filter/html/svxcss1.cxx 
b/sw/source/filter/html/svxcss1.cxx
index b956bb401a9e..c1ecd4315b16 100644
--- a/sw/source/filter/html/svxcss1.cxx
+++ b/sw/source/filter/html/svxcss1.cxx
@@ -17,6 +17,9 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <cmath>
 #include <memory>
 #include <stdlib.h>
 
@@ -1421,15 +1424,15 @@ static void ParseCSS1_background( const CSS1Expression 
*pExpr,
                 // only distinguish between 0 and !0. Therefore pixel
                 // can be handled like all other units.
 
-                sal_uLong nLength = static_cast<sal_uLong>(pExpr->GetNumber());
+                bool nonZero = std::trunc(pExpr->GetNumber()) != 0.0;
                 if( !bHori )
                 {
-                    ePos = nLength ? GPOS_MM : GPOS_LT;
+                    ePos = nonZero ? GPOS_MM : GPOS_LT;
                     bHori = true;
                 }
                 else if( !bVert )
                 {
-                    MergeVert( ePos, (nLength ? GPOS_LM : GPOS_LT) );
+                    MergeVert( ePos, (nonZero ? GPOS_LM : GPOS_LT) );
                     bVert = true;
                 }
             }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to