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 --- a/source/i18n/units_complexconverter.cpp +++ b/source/i18n/units_complexconverter.cpp @@ -237,6 +237,11 @@ void ComplexUnitsConverter::applyRounder(MaybeStackArray &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