From 29f1188d191a7a75ac7ffa4bfa390f625da39c53 Mon Sep 17 00:00:00 2001 From: Andreas Schwab 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