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().
This commit is contained in:
ed 2013-05-25 12:11:20 +00:00
parent 9877390809
commit 3f589c4a65

View File

@ -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);