summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2021-03-05 13:52:50 +0100
committerStephan Bergmann <sbergman@redhat.com>2021-03-05 19:30:33 +0100
commit6b99873a209f85a3322a318d45546d573a0a024e (patch)
tree0e52917e97ead0388cf5f74f84ce8e331417d012
parent2a772fcef57f55a2ad9b2085eec5b068902f331b (diff)
Avoid float-cast-overflow
...during UITest_sw_options UITEST_TEST_NAME=optionsDialog.optionsDialog.test_moreIconsDialog, > /cui/source/dialogs/AdditionsDialog.cxx:641:17: runtime error: nan is outside the range of representable values of type 'int' > #0 0x2b73f252fab6 in AdditionsItem::AdditionsItem(weld::Widget*, AdditionsDialog*, AdditionInfo const&) /cui/source/dialogs/AdditionsDialog.cxx:641:17 > #1 0x2b73f2562963 in void __gnu_cxx::new_allocator<AdditionsItem>::construct<AdditionsItem, weld::Container*, AdditionsDialog*&, AdditionInfo&>(AdditionsItem*, weld::Container*&&, AdditionsDialog*&, AdditionInfo&) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/ext/new_allocator.h:136:23 > #2 0x2b73f25618f8 in void std::allocator_traits<std::allocator<AdditionsItem> >::construct<AdditionsItem, weld::Container*, AdditionsDialog*&, AdditionInfo&>(std::allocator<AdditionsItem>&, AdditionsItem*, weld::Container*&&, AdditionsDialog*&, AdditionInfo&) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/alloc_traits.h:475:8 > #3 0x2b73f2560ea0 in std::_Sp_counted_ptr_inplace<AdditionsItem, std::allocator<AdditionsItem>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<weld::Container*, AdditionsDialog*&, AdditionInfo&>(std::allocator<AdditionsItem>, weld::Container*&&, AdditionsDialog*&, AdditionInfo&) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/shared_ptr_base.h:526:4 > #4 0x2b73f2560222 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<AdditionsItem, std::allocator<AdditionsItem>, weld::Container*, AdditionsDialog*&, AdditionInfo&>(std::_Sp_make_shared_tag, AdditionsItem*, std::allocator<AdditionsItem> const&, weld::Container*&&, AdditionsDialog*&, AdditionInfo&) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/shared_ptr_base.h:637:18 > #5 0x2b73f255fc3d in std::__shared_ptr<AdditionsItem, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<AdditionsItem>, weld::Container*, AdditionsDialog*&, AdditionInfo&>(std::_Sp_make_shared_tag, std::allocator<AdditionsItem> const&, weld::Container*&&, AdditionsDialog*&, AdditionInfo&) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/shared_ptr_base.h:1294:14 > #6 0x2b73f255f9bb in std::shared_ptr<AdditionsItem>::shared_ptr<std::allocator<AdditionsItem>, weld::Container*, AdditionsDialog*&, AdditionInfo&>(std::_Sp_make_shared_tag, std::allocator<AdditionsItem> const&, weld::Container*&&, AdditionsDialog*&, AdditionInfo&) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/shared_ptr.h:344:4 > #7 0x2b73f255f5b7 in std::shared_ptr<AdditionsItem> std::allocate_shared<AdditionsItem, std::allocator<AdditionsItem>, weld::Container*, AdditionsDialog*&, AdditionInfo&>(std::allocator<AdditionsItem> const&, weld::Container*&&, AdditionsDialog*&, AdditionInfo&) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/shared_ptr.h:690:14 > #8 0x2b73f253e5b1 in std::shared_ptr<AdditionsItem> std::make_shared<AdditionsItem, weld::Container*, AdditionsDialog*&, AdditionInfo&>(weld::Container*&&, AdditionsDialog*&, AdditionInfo&) /home/tdf/lode/opt_private/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/shared_ptr.h:706:14 > #9 0x2b73f2510e97 in SearchAndParseThread::Append(AdditionInfo&) /cui/source/dialogs/AdditionsDialog.cxx:317:20 > #10 0x2b73f2517167 in SearchAndParseThread::Search() /cui/source/dialogs/AdditionsDialog.cxx:357:17 > #11 0x2b73f251c5fe in SearchAndParseThread::execute() /cui/source/dialogs/AdditionsDialog.cxx:426:9 > #12 0x2b6ecdd21dd7 in salhelper::Thread::run() /salhelper/source/thread.cxx:40:9 > #13 0x2b6ecdd2401f in threadFunc /include/osl/thread.hxx:189:15 > #14 0x2b6ebabcdda8 in osl_thread_start_Impl(void*) /sal/osl/unx/thread.cxx:264:9 > #15 0x2b6ebca70ea4 in start_thread (/lib64/libpthread.so.0+0x7ea4) > #16 0x2b6ebd3a696c in clone (/lib64/libc.so.6+0xfe96c) (<https://ci.libreoffice.org/job/lo_ubsan/1939/>) in code introduced with 48a796c5bbdf897228eb4125512e4f80527f4b55 "tdf#133026: Additions: Rating image implementation", when additionInfo.sName is "Colibre Icon Theme Legacy" and additionInfo.sRating is "NaN". (All those additionInfo strings are apparently obtained from remote JSON data in parseResponse, cui/source/dialogs/AdditionsDialog.cxx.) Change-Id: I073990870c432591ee66fe5ec9580e46ea7e716a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112017 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
-rw-r--r--cui/source/dialogs/AdditionsDialog.cxx4
1 files changed, 3 insertions, 1 deletions
diff --git a/cui/source/dialogs/AdditionsDialog.cxx b/cui/source/dialogs/AdditionsDialog.cxx
index 4ea381e385db..c41e6c262d0e 100644
--- a/cui/source/dialogs/AdditionsDialog.cxx
+++ b/cui/source/dialogs/AdditionsDialog.cxx
@@ -10,6 +10,8 @@
#include <sal/config.h>
+#include <algorithm>
+#include <cmath>
#include <string_view>
#include <config_folders.h>
@@ -638,7 +640,7 @@ AdditionsItem::AdditionsItem(weld::Widget* pParent, AdditionsDialog* pParentDial
m_xLabelName->set_label(sExtensionName);
double aExtensionRating = additionInfo.sRating.toDouble();
- switch (int(aExtensionRating))
+ switch (std::isnan(aExtensionRating) ? 0 : int(std::clamp(aExtensionRating, 0.0, 5.0)))
{
case 5:
m_xImageVoting5->set_from_icon_name("cmd/sc_stars-full.png");