]> granicus.if.org Git - icu/commitdiff
ICU-9322 Fix some memory check errors in ICU tools
authorMichael Ow <mow@svn.icu-project.org>
Thu, 17 May 2012 19:58:22 +0000 (19:58 +0000)
committerMichael Ow <mow@svn.icu-project.org>
Thu, 17 May 2012 19:58:22 +0000 (19:58 +0000)
X-SVN-Rev: 31829

13 files changed:
icu4c/source/Makefile.in
icu4c/source/extra/uconv/uconv.cpp
icu4c/source/i18n/ucol_bld.cpp
icu4c/source/icudefs.mk.in
icu4c/source/tools/gencnval/gencnval.c
icu4c/source/tools/genrb/genrb.c
icu4c/source/tools/genrb/parse.cpp
icu4c/source/tools/genrb/reslist.c
icu4c/source/tools/gensprep/gensprep.c
icu4c/source/tools/gensprep/store.c
icu4c/source/tools/icuinfo/Makefile.in
icu4c/source/tools/makeconv/gencnvex.c
icu4c/source/tools/toolutil/ucm.c

index bcaec91a9e957f59b8bbd0f22fa935593ab7e224..e0b9b09a735ea6873507d262d759e27e365143e1 100644 (file)
@@ -226,7 +226,7 @@ config/icucross.mk: $(top_builddir)/icudefs.mk  $(top_builddir)/Makefile
        @(echo 'TOOLBINDIR=$$(cross_buildroot)/bin' ;\
          echo 'TOOLLIBDIR=$$(cross_buildroot)/lib' ;\
          echo "INVOKE=$(LDLIBRARYPATH_ENVVAR)=$(LIBRARY_PATH_PREFIX)"'$$(TOOLLIBDIR):$$(cross_buildroot)/stubdata:$$(cross_buildroot)/tools/ctestfw:$$$$'"$(LDLIBRARYPATH_ENVVAR)" ;\
-         echo "PKGDATA_INVOKE=$(LDLIBRARYPATH_ENVVAR)=$(LIBRARY_PATH_PREFIX)"'$$(cross_buildroot)/stubdata:$$(cross_buildroot)/tools/ctestfw:$$(TOOLLIBDIR):$$$$'"$(LDLIBRARYPATH_ENVVAR) "'$$'"(PKGDATA_INVOKE_OPTS)" ;\
+         echo "PKGDATA_INVOKE=$(LDLIBRARYPATH_ENVVAR)=$(LIBRARY_PATH_PREFIX)"'$$(cross_buildroot)/stubdata:$$(cross_buildroot)/tools/ctestfw:$$(TOOLLIBDIR):$$$$'"$(LDLIBRARYPATH_ENVVAR) " ;\
          echo ) >> $@
 
 
index 54ce847580dca694c4a284bd303a7a3ae2c0182b..41ed32caf46171643bb41af4e16ca30c48072a5b 100644 (file)
@@ -1380,6 +1380,8 @@ normal_exit:
         fclose(outfile);
     }
 
+    u_cleanup();
+
     return ret;
 }
 
index 190cd1b8bca973ed52777bcbcff144a41bde6585..566812b1abae0c986d9bcf6eef0b9cef5289c28d 100644 (file)
@@ -1,7 +1,7 @@
 /*
 *******************************************************************************
 *
-*   Copyright (C) 2001-2011, International Business Machines
+*   Copyright (C) 2001-2012, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 *******************************************************************************
@@ -743,6 +743,11 @@ U_CFUNC void ucol_initBuffers(UColTokenParser *src, UColTokListHeader *lh, UErro
 
     uprv_memset(t, 0, UCOL_STRENGTH_LIMIT*sizeof(uint32_t));
 
+    /* must initialize ranges to avoid memory check warnings */
+    for (int i = 0; i < UCOL_CE_STRENGTH_LIMIT; i++) {
+        uprv_memset(Gens[i].ranges, 0, sizeof(Gens[i].ranges));
+    }
+
     tok->toInsert = 1;
     t[tok->strength] = 1;
 
index 54d074996b814923abdd1bf2afa3b2ce35417a66..e7fb6959bcf2ac22b8a0006b3315db165ef6d107 100644 (file)
@@ -77,8 +77,6 @@ ICUPKGDATA_DIR = $(ICUDATA_DIR)
 endif
 endif
 endif
-# This is needed so that make -j2 doesn't complain when invoking pkgdata's make
-PKGDATA_INVOKE_OPTS = MAKEFLAGS=
 
 # These are defined here because mh-cygwin-msvc needs to override these values.
 ICUPKGDATA_INSTALL_DIR = $(DESTDIR)$(ICUPKGDATA_DIR)
@@ -259,7 +257,7 @@ LIBICUIO    = $(LLIBDIR) $(ICULIBS_IO)
 # overridden by icucross.mk
 INVOKE = $(LDLIBRARYPATH_ENVVAR)=$(LIBRARY_PATH_PREFIX)$(LIBDIR):$(top_builddir)/stubdata:$(top_builddir)/tools/ctestfw:$$$(LDLIBRARYPATH_ENVVAR) $(LEAK_CHECKER)
 # prefer stubdata
-PKGDATA_INVOKE = $(LDLIBRARYPATH_ENVVAR)=$(top_builddir)/stubdata:$(top_builddir)/tools/ctestfw:$(LIBRARY_PATH_PREFIX)$(LIBDIR):$$$(LDLIBRARYPATH_ENVVAR) $(LEAK_CHECKER) $(PKGDATA_INVOKE_OPTS)
+PKGDATA_INVOKE = $(LDLIBRARYPATH_ENVVAR)=$(top_builddir)/stubdata:$(top_builddir)/tools/ctestfw:$(LIBRARY_PATH_PREFIX)$(LIBDIR):$$$(LDLIBRARYPATH_ENVVAR) $(LEAK_CHECKER)
 INSTALLED_INVOKE = $(LDLIBRARYPATH_ENVVAR)=$(libdir):$$$(LDLIBRARYPATH_ENVVAR)
 
 # Platform-specific setup
index 12718cd7beeb5f32a5fee23377d4db620d7c34fd..5fe446f4ea99838e64a0135eb2bb2083c1604d8b 100644 (file)
@@ -217,6 +217,7 @@ static UOption options[]={
 
 extern int
 main(int argc, char* argv[]) {
+    int i, n;
     char pathBuf[512];
     FileStream *in;
     UNewDataMemory *out;
@@ -305,6 +306,15 @@ main(int argc, char* argv[]) {
         exit(errorCode);
     }
 
+    /* clean up tags */
+    for (i = 0; i < MAX_TAG_COUNT; i++) {
+        for (n = 0; n < MAX_CONV_COUNT; n++) {
+            if (tags[i].aliasList[n].aliases!=NULL) {
+                uprv_free(tags[i].aliasList[n].aliases);
+            }
+        }
+    }
+
     return 0;
 }
 
@@ -1052,8 +1062,9 @@ writeAliasTable(UNewDataMemory *out) {
         uprv_free(normalizedStrings);
     }
 
-    uprv_free(aliasArrLists);
+    uprv_free(uniqueAliasesToConverter);
     uprv_free(uniqueAliases);
+    uprv_free(aliasArrLists);
 }
 
 static char *
index c4f16e15930d054b5e5f80ba796654d72e4beaad..7c5248092b23b4f2cb998117ef13889163485898 100644 (file)
@@ -435,6 +435,8 @@ main(int argc,
         }
     }
 
+    u_cleanup();
+
     /* Dont return warnings as a failure */
     if (U_SUCCESS(status)) {
         return 0;
index f5a5fd779ae9ab2ec158bf23368bb0b068e7c098..93957f6056c891cca4ca1fa80b5e1c13c2064295 100644 (file)
@@ -139,7 +139,7 @@ static void
 cleanupLookahead(ParseState* state)
 {
     uint32_t i;
-    for (i = 0; i < MAX_LOOKAHEAD; i++)
+    for (i = 0; i <= MAX_LOOKAHEAD; i++)
     {
         ustr_deinit(&state->lookahead[i].value);
         ustr_deinit(&state->lookahead[i].comment);
@@ -1764,6 +1764,8 @@ parseInclude(ParseState* state, char *tag, uint32_t startline, const struct UStr
     uBuffer = ucbuf_getBuffer(ucbuf,&len,status);
     result = string_open(state->bundle, tag, uBuffer, len, comment, status);
 
+    ucbuf_close(ucbuf);
+
     uprv_free(pTarget);
 
     uprv_free(filename);
index 0f0130a2cf56539281961d2eebff7055aabb4c46..209eea38adc7acdaf4bc886c77692894512e9282 100644 (file)
@@ -1,7 +1,7 @@
 /*
 *******************************************************************************
 *
-*   Copyright (C) 2000-2011, International Business Machines
+*   Copyright (C) 2000-2012, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 *******************************************************************************
@@ -1173,6 +1173,10 @@ static void bin_close(struct SResource *binres) {
         uprv_free(binres->u.fBinaryValue.fData);
         binres->u.fBinaryValue.fData = NULL;
     }
+    if (binres->u.fBinaryValue.fFileName != NULL) {
+        uprv_free(binres->u.fBinaryValue.fFileName);
+        binres->u.fBinaryValue.fFileName = NULL;
+    }
 }
 
 void res_close(struct SResource *res) {
index c3f1ade5713d0cb8dfd36ea4ac314e51b948bab8..b31f63517e7d7a36057f7b745bc6bf573d3a84dd 100644 (file)
@@ -1,7 +1,7 @@
 /*
 *******************************************************************************
 *
-*   Copyright (C) 2003-2009, International Business Machines
+*   Copyright (C) 2003-2012, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 *******************************************************************************
@@ -262,6 +262,8 @@ main(int argc, char* argv[]) {
 
     uprv_free(filename);
 
+    u_cleanup();
+
 #endif
 
     return errorCode;
index 49ea02eb5f7bdd78e1ba9add1b48ebcc1c4d2ad8..8d0181df664776833411063a1c34a5a2d974eceb 100644 (file)
@@ -332,6 +332,7 @@ storeMappingData(){
                 }else{
                     /* realloc */
                     UChar* newMappingData = (uint16_t*) uprv_malloc(U_SIZEOF_UCHAR * mappingDataCapacity*2);
+                    uprv_memset(newMappingData, 0, U_SIZEOF_UCHAR * mappingDataCapacity*2); /* must initialize to avoid memory check warnings */
                     if(newMappingData == NULL){
                         fprintf(stderr, "Could not realloc the mapping data!\n");
                         exit(U_MEMORY_ALLOCATION_ERROR);
@@ -650,13 +651,15 @@ generateData(const char *dataDir, const char* bundleName) {
         uhash_close(hashTable);
     }
 #endif
+
+    uprv_free(fileName);
 }
 
 #if !UCONFIG_NO_IDNA
 
 extern void
 cleanUpData(void) {
-
+    uprv_free(mappingData);
     utrie_close(sprepTrie);
     uprv_free(sprepTrie);
 }
index 4ba741d9f7897e7fda937a9159e9f2927866cc42..89c0b74be6e6a1f36fc6ab2dc14fc72c9c3da8fc 100644 (file)
@@ -1,5 +1,5 @@
 ## Makefile.in for ICU - tools/icuinfo
-## Copyright (c) 1999-2011, International Business Machines Corporation and
+## Copyright (c) 1999-2012, International Business Machines Corporation and
 ## others. All Rights Reserved.
 ## Madhu Katragadda
 
@@ -31,7 +31,7 @@ DEPS = $(OBJECTS:.o=.d)
 
 # pass some information
 
-ICUINFO_OPTS=-i ../../data/out/build/$(ICUDATA_PLATFORM_NAME) -x $(top_builddir)/config/icuinfo.xml -v
+ICUINFO_OPTS=-i ../../data/out/build/$(ICUDATA_PLATFORM_NAME) -x $(top_builddir)/config/icuinfo.xml -v -K
 
 ## List of phony targets
 .PHONY : all all-local install install-local clean clean-local         \
index cf09cbe5b3a605d291acf468b01729a5b4a67316..2ad5e518b51d08e68ed3d3c27c2ae44efac8b21f 100644 (file)
@@ -1,7 +1,7 @@
 /*
 *******************************************************************************
 *
-*   Copyright (C) 2003-2007, International Business Machines
+*   Copyright (C) 2003-2012, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 *******************************************************************************
@@ -100,6 +100,7 @@ CnvExtClose(NewConverter *cnvData) {
         utm_close(extData->fromUTableUChars);
         utm_close(extData->fromUTableValues);
         utm_close(extData->fromUBytes);
+        uprv_free(extData);
     }
 }
 
index 8d4f33a1790be68e674c6d1ac9ea4a322de92990..8942a3aaa0fdf7f3b96be601de5daaaec83a9c95 100644 (file)
@@ -1,7 +1,7 @@
 /*
 *******************************************************************************
 *
-*   Copyright (C) 2003-2009, International Business Machines
+*   Copyright (C) 2003-2012, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 *******************************************************************************
@@ -1030,8 +1030,8 @@ ucm_open() {
 U_CAPI void U_EXPORT2
 ucm_close(UCMFile *ucm) {
     if(ucm!=NULL) {
-        uprv_free(ucm->base);
-        uprv_free(ucm->ext);
+        ucm_closeTable(ucm->base);
+        ucm_closeTable(ucm->ext);
         uprv_free(ucm);
     }
 }