ICU-10992 fix memory leak

X-SVN-Rev: 36539
This commit is contained in:
Steven R. Loomis 2014-09-16 23:46:35 +00:00
parent e763ff013b
commit 9a6f69ef42

View file

@ -1582,35 +1582,43 @@ static void TestOverrideNumberFormat(void) {
char bbuf2[kBbufMax];
const char* localeString = "zh@numbers=hanidays";
UDateFormat* fmt;
UNumberFormat* overrideFmt;
const UNumberFormat* getter_result;
int32_t i;
unsigned j;
fmt=udat_open(UDAT_PATTERN, UDAT_PATTERN,"en_US",NULL,0,pattern, u_strlen(pattern), &status);
if (!assertSuccess("udat_open()", &status)) {
return;
}
overrideFmt = unum_open(UNUM_DEFAULT, NULL, 0, localeString, NULL, &status);
assertSuccess("unum_open()", &status);
expected=(UChar*)malloc(sizeof(UChar) * 10);
fields=(UChar*)malloc(sizeof(UChar) * 10);
u_uastrcpy(fields, "d");
u_uastrcpy(pattern,"MM d");
fmt=udat_open(UDAT_PATTERN, UDAT_PATTERN,"en_US",NULL,0,pattern, u_strlen(pattern), &status);
if (!assertSuccess("udat_open()", &status)) {
return;
}
// loop 50 times to check getter/setter
for (i = 0; i < 50; i++){
for (i = 0; i < 5; i++){
UNumberFormat* overrideFmt;
overrideFmt = unum_open(UNUM_DEFAULT, NULL, 0, localeString, NULL, &status);
assertSuccess("unum_open()", &status);
udat_adoptNumberFormatForFields(fmt, fields, overrideFmt, &status);
overrideFmt = NULL; // no longer valid
assertSuccess("udat_setNumberFormatForField()", &status);
getter_result = udat_getNumberFormatForField(fmt, 'd');
if (getter_result != overrideFmt)
log_err("FAIL: udat_getNumberFormatForField does not work\n");
if(getter_result == NULL) {
log_err("FAIL: udat_getNumberFormatForField did not return a valid pointer\n");
}
}
{
UNumberFormat* overrideFmt;
overrideFmt = unum_open(UNUM_DEFAULT, NULL, 0, localeString, NULL, &status);
assertSuccess("unum_open()", &status);
udat_setNumberFormat(fmt, overrideFmt); // test the same override NF will not crash
}
udat_setNumberFormat(fmt, overrideFmt); // test the same override NF will not crash
udat_close(fmt);
for (j=0; i<sizeof(overrideNumberFormat)/sizeof(overrideNumberFormat[0]); i++){