2021-05-12 15:31:44 +02:00
|
|
|
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
|
|
|
|
|
2022-04-11 20:17:04 +02:00
|
|
|
Index: icu/source/i18n/units_complexconverter.cpp
|
|
|
|
===================================================================
|
|
|
|
--- icu.orig/source/i18n/units_complexconverter.cpp
|
|
|
|
+++ icu/source/i18n/units_complexconverter.cpp
|
|
|
|
@@ -242,6 +242,11 @@ void ComplexUnitsConverter::applyRounder
|
2021-05-12 15:31:44 +02:00
|
|
|
}
|
|
|
|
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
|