diff options
author | ed <ed@FreeBSD.org> | 2013-05-25 12:11:20 +0000 |
---|---|---|
committer | ed <ed@FreeBSD.org> | 2013-05-25 12:11:20 +0000 |
commit | 3f589c4a65061002236515a5e50d5eafb6c1f50f (patch) | |
tree | b6a6a45af9327825d9d6ad49d93b139fbec4d870 /lib/libc/iconv | |
parent | 987739080987bee39127ec6c8175ca15e60a57d9 (diff) | |
download | FreeBSD-src-3f589c4a65061002236515a5e50d5eafb6c1f50f.zip FreeBSD-src-3f589c4a65061002236515a5e50d5eafb6c1f50f.tar.gz |
Only call free() on something we allocated.
If we were already provided a struct _citrus_iconv (e.g. through
iconv_open_into()), we should not call free() in case io_init_context()
fails. Instead, call it on the pointer of the allocated object, which
will be NULL in case of iconv_open_into().
Diffstat (limited to 'lib/libc/iconv')
-rw-r--r-- | lib/libc/iconv/citrus_iconv.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/libc/iconv/citrus_iconv.c b/lib/libc/iconv/citrus_iconv.c index 941ee02..04acccf 100644 --- a/lib/libc/iconv/citrus_iconv.c +++ b/lib/libc/iconv/citrus_iconv.c @@ -258,7 +258,7 @@ int _citrus_iconv_open(struct _citrus_iconv * __restrict * __restrict rcv, const char * __restrict src, const char * __restrict dst) { - struct _citrus_iconv *cv; + struct _citrus_iconv *cv = NULL; struct _citrus_iconv_shared *ci = NULL; char realdst[PATH_MAX], realsrc[PATH_MAX]; char buf[PATH_MAX], path[PATH_MAX]; @@ -301,7 +301,7 @@ _citrus_iconv_open(struct _citrus_iconv * __restrict * __restrict rcv, ret = (*ci->ci_ops->io_init_context)(*rcv); if (ret) { release_shared(ci); - free(*rcv); + free(cv); return (ret); } return (0); |