iconv sync 4/x: FreeBSD SVN 267438
authorJohn Marino <draco@marino.st>
Fri, 3 Jul 2015 22:00:45 +0000 (00:00 +0200)
committerJohn Marino <draco@marino.st>
Sat, 4 Jul 2015 08:19:05 +0000 (10:19 +0200)
iconv_open: initialize ci_ilseq_invalid field of _citrus_iconv_shared
            struct after allocation with malloc

iconv_list: reduce a memory leak by copying strings only once

lib/libc/iconv/iconv.c

index 4d31667..0f887ea 100644 (file)
@@ -86,6 +86,7 @@ _iconv_open(const char *out, const char *in, struct _citrus_iconv *handle)
        }
 
        handle->cv_shared->ci_discard_ilseq = strcasestr(out, "//IGNORE");
+       handle->cv_shared->ci_ilseq_invalid = false;
        handle->cv_shared->ci_hooks = NULL;
 
        return ((iconv_t)(void *)handle);
@@ -226,7 +227,7 @@ iconvlist(int (*do_one) (unsigned int, const char * const *,
                        return;
                }
                strlcpy(curkey, list[i], slashpos - list[i] + 1);
-               names[j++] = strdup(curkey);
+               names[j++] = curkey;
                for (; (i < sz) && (memcmp(curkey, list[i], strlen(curkey)) == 0); i++) {
                        slashpos = strchr(list[i], '/');
                        curitem = (char *)malloc(strlen(slashpos) + 1);
@@ -238,7 +239,7 @@ iconvlist(int (*do_one) (unsigned int, const char * const *,
                        if (strcmp(curkey, curitem) == 0) {
                                continue;
                        }
-                       names[j++] = strdup(curitem);
+                       names[j++] = curitem;
                }
                np = (const char * const *)names;
                do_one(j, np, data);