Accepting request 892508 from home:Andreas_Schwab:Factory

- nan-undefined-conversion.patch: ICU-21613 Fix undefined behaviour in
  ComplexUnitsConverter::applyRounder

OBS-URL: https://build.opensuse.org/request/show/892508
OBS-URL: https://build.opensuse.org/package/show/X11:common:Factory/icu?expand=0&rev=149
This commit is contained in:
Jan Engelhardt 2021-05-12 13:31:44 +00:00 committed by Git OBS Bridge
parent 4c26bb81c3
commit 370f2dda3b
3 changed files with 27 additions and 0 deletions

View File

@ -1,3 +1,9 @@
-------------------------------------------------------------------
Wed May 12 08:23:58 UTC 2021 - Andreas Schwab <schwab@suse.de>
- nan-undefined-conversion.patch: ICU-21613 Fix undefined behaviour in
ComplexUnitsConverter::applyRounder
------------------------------------------------------------------- -------------------------------------------------------------------
Sat Apr 10 22:41:04 UTC 2021 - Jan Engelhardt <jengelh@inai.de> Sat Apr 10 22:41:04 UTC 2021 - Jan Engelhardt <jengelh@inai.de>

View File

@ -44,6 +44,7 @@ Patch4: icu-fix-install-mode-files.diff
Patch6: icu-error-reporting.diff Patch6: icu-error-reporting.diff
Patch7: icu-avoid-x87-excess-precision.diff Patch7: icu-avoid-x87-excess-precision.diff
Patch8: locale.diff Patch8: locale.diff
Patch9: nan-undefined-conversion.patch
BuildRequires: fdupes BuildRequires: fdupes
BuildRequires: gcc-c++ BuildRequires: gcc-c++
BuildRequires: pkg-config BuildRequires: pkg-config

View File

@ -0,0 +1,20 @@
From 29f1188d191a7a75ac7ffa4bfa390f625da39c53 Mon Sep 17 00:00:00 2001
From: Andreas Schwab <schwab@suse.de>
Date: Tue, 11 May 2021 19:04:24 +0200
Subject: [PATCH] ICU-21613 Fix undefined behaviour in
ComplexUnitsConverter::applyRounder
--- a/source/i18n/units_complexconverter.cpp
+++ b/source/i18n/units_complexconverter.cpp
@@ -237,6 +237,11 @@ void ComplexUnitsConverter::applyRounder(MaybeStackArray<int64_t, 5> &intValues,
}
quantity = decimalQuantity.toDouble();
+ if (uprv_isNaN(quantity) || uprv_isInfinite(quantity)) {
+ // Do nothing for non-finite values, since conversion to int64_t is undefined
+ return;
+ }
+
int32_t lastIndex = unitsConverters_.length() - 1;
if (lastIndex == 0) {
// Only one element, no need to bubble up the carry