From 2f5a46ffd5013a9d2566c6649d753ebc0cae3540 Mon Sep 17 00:00:00 2001 From: Frank Tang Date: Thu, 1 Aug 2024 14:08:53 -0700 Subject: [PATCH] ICU-22819 Fix memory leak during error --- icu4c/source/common/mlbe.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/icu4c/source/common/mlbe.cpp b/icu4c/source/common/mlbe.cpp index 178c0239d26..b5385428e0c 100644 --- a/icu4c/source/common/mlbe.cpp +++ b/icu4c/source/common/mlbe.cpp @@ -57,12 +57,12 @@ int32_t MlBreakEngine::divideUpRange(UText *inText, int32_t rangeStart, int32_t // moving forward, finally the last six values in the indexList are // [length-4, length-3, length-2, length-1, -1, -1]. The "+4" here means four extra "-1". int32_t indexSize = codePointLength + 4; - int32_t* indexList = static_cast(uprv_malloc(indexSize * sizeof(int32_t))); - if (indexList == nullptr) { + LocalMemory indexList(static_cast(uprv_malloc(indexSize * sizeof(int32_t)))); + if (indexList.isNull()) { status = U_MEMORY_ALLOCATION_ERROR; return 0; } - int32_t numCodeUnits = initIndexList(inString, indexList, status); + int32_t numCodeUnits = initIndexList(inString, indexList.getAlias(), status); // Add a break for the start. boundary.addElement(0, status); @@ -71,13 +71,12 @@ int32_t MlBreakEngine::divideUpRange(UText *inText, int32_t rangeStart, int32_t for (int32_t idx = 0; idx + 1 < codePointLength && U_SUCCESS(status); idx++) { numBreaks = - evaluateBreakpoint(inString, indexList, idx, numCodeUnits, numBreaks, boundary, status); + evaluateBreakpoint(inString, indexList.getAlias(), idx, numCodeUnits, numBreaks, boundary, status); if (idx + 4 < codePointLength) { indexList[idx + 6] = numCodeUnits; numCodeUnits += U16_LENGTH(inString.char32At(indexList[idx + 6])); } } - uprv_free(indexList); if (U_FAILURE(status)) return 0;