icu/nan-undefined-conversion.patch

23 lines
890 B
Diff
Raw Permalink Normal View History

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
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
}
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