ICU-10992 merge from trunk, fix memory leak

X-SVN-Rev: 36540
diff --git a/APIChangeReport.html b/APIChangeReport.html
index 7a679c0..dde5c7b 100644
--- a/APIChangeReport.html
+++ b/APIChangeReport.html
@@ -4496,7 +4496,7 @@
 <a href="#_top">(jump back to top)</a>
 <hr>
 <p>
-<i><font size="-1">Contents generated by StableAPI tool on Tue Sep 16 04:14:38 EDT 2014<br>Copyright (C) 2014, International Business Machines Corporation, All Rights Reserved.</font></i>
+<i><font size="-1">Contents generated by StableAPI tool on Tue Sep 16 12:21:04 PDT 2014<br>Copyright (C) 2014, International Business Machines Corporation, All Rights Reserved.</font></i>
 </p>
 </body>
 </html>
diff --git a/source/test/cintltst/cdattst.c b/source/test/cintltst/cdattst.c
index 86e9db1..2abc310 100644
--- a/source/test/cintltst/cdattst.c
+++ b/source/test/cintltst/cdattst.c
@@ -1582,35 +1582,43 @@
     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");
+        }
     }
-    udat_setNumberFormat(fmt, overrideFmt); // test the same override NF will not crash
+
+    {
+      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_close(fmt);
     
     for (j=0; i<sizeof(overrideNumberFormat)/sizeof(overrideNumberFormat[0]); i++){