diff --git a/icu4c/source/common/rbbirb.cpp b/icu4c/source/common/rbbirb.cpp index 5e015c9b271e..4fd789970cc0 100644 --- a/icu4c/source/common/rbbirb.cpp +++ b/icu4c/source/common/rbbirb.cpp @@ -182,12 +182,12 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() { } #endif - RBBIDataHeader* data = static_cast(uprv_malloc(totalSize)); - if (data == nullptr) { + LocalMemory data(static_cast(uprv_malloc(totalSize))); + if (data.isNull()) { *fStatus = U_MEMORY_ALLOCATION_ERROR; return nullptr; } - uprv_memset(data, 0, totalSize); + uprv_memset(data.getAlias(), 0, totalSize); data->fMagic = 0xb1a0; @@ -213,23 +213,23 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() { uprv_memset(data->fReserved, 0, sizeof(data->fReserved)); - fForwardTable->exportTable(reinterpret_cast(data) + data->fFTable); - fForwardTable->exportSafeTable(reinterpret_cast(data) + data->fRTable); - fSetBuilder->serializeTrie(reinterpret_cast(data) + data->fTrie); + fForwardTable->exportTable(reinterpret_cast(data.getAlias()) + data->fFTable); + fForwardTable->exportSafeTable(reinterpret_cast(data.getAlias()) + data->fRTable); + fSetBuilder->serializeTrie(reinterpret_cast(data.getAlias()) + data->fTrie); - int32_t* ruleStatusTable = reinterpret_cast(reinterpret_cast(data) + data->fStatusTable); + int32_t* ruleStatusTable = reinterpret_cast(reinterpret_cast(data.getAlias()) + data->fStatusTable); for (i=0; isize(); i++) { ruleStatusTable[i] = fRuleStatusVals->elementAti(i); } - u_strToUTF8WithSub(reinterpret_cast(data) + data->fRuleSource, rulesSize, &rulesLengthInUTF8, + u_strToUTF8WithSub(reinterpret_cast(data.getAlias()) + data->fRuleSource, rulesSize, &rulesLengthInUTF8, fStrippedRules.getBuffer(), fStrippedRules.length(), 0xfffd, nullptr, fStatus); if (U_FAILURE(*fStatus)) { return nullptr; } - return data; + return data.orphan(); }