ICU-22004 Avoid UBSan bug by casting only when success
diff --git a/icu4c/source/i18n/ulocdata.cpp b/icu4c/source/i18n/ulocdata.cpp
index 68b9e0c..c7eb8c3 100644
--- a/icu4c/source/i18n/ulocdata.cpp
+++ b/icu4c/source/i18n/ulocdata.cpp
@@ -230,7 +230,10 @@ ulocdata_getMeasurementSystem(const char *localeID, UErrorCode *status){
}
measurement = measurementTypeBundleForLocale(localeID, MEASUREMENT_SYSTEM, status);
- system = (UMeasurementSystem) ures_getInt(measurement, status);
+ int32_t result = ures_getInt(measurement, status);
+ if (U_SUCCESS(*status)) {
+ system = static_cast<UMeasurementSystem>(result);
+ }
ures_close(measurement);