From 6c8c6aa430018d8a06273421c735d6b479dfb119 Mon Sep 17 00:00:00 2001 From: Frank Tang Date: Fri, 2 Aug 2024 02:56:55 -0700 Subject: [PATCH] ICU-22827 Fix memLeak by using LocalUResourceBundlePointer --- icu4c/source/i18n/timezone.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/icu4c/source/i18n/timezone.cpp b/icu4c/source/i18n/timezone.cpp index 064bf83cb7b8..118dfe2f2af6 100644 --- a/icu4c/source/i18n/timezone.cpp +++ b/icu4c/source/i18n/timezone.cpp @@ -1607,8 +1607,11 @@ TimeZone::getWindowsID(const UnicodeString& id, UnicodeString& winid, UErrorCode return winid; } - UResourceBundle *mapTimezones = ures_openDirect(nullptr, "windowsZones", &status); - ures_getByKey(mapTimezones, "mapTimezones", mapTimezones, &status); + LocalUResourceBundlePointer mapTimezones(ures_openDirect(nullptr, "windowsZones", &status)); + if (U_FAILURE(status)) { + return winid; + } + ures_getByKey(mapTimezones.getAlias(), "mapTimezones", mapTimezones.getAlias(), &status); if (U_FAILURE(status)) { return winid; @@ -1616,8 +1619,8 @@ TimeZone::getWindowsID(const UnicodeString& id, UnicodeString& winid, UErrorCode UResourceBundle *winzone = nullptr; UBool found = false; - while (ures_hasNext(mapTimezones) && !found) { - winzone = ures_getNextResource(mapTimezones, winzone, &status); + while (ures_hasNext(mapTimezones.getAlias()) && !found) { + winzone = ures_getNextResource(mapTimezones.getAlias(), winzone, &status); if (U_FAILURE(status)) { break; } @@ -1658,7 +1661,6 @@ TimeZone::getWindowsID(const UnicodeString& id, UnicodeString& winid, UErrorCode ures_close(regionalData); } ures_close(winzone); - ures_close(mapTimezones); return winid; }