Subject: bug#19578: Memory leaks in coreutils/lib/locale_charset.c

From: Pádraig Brady <[email-masked]>
Date: Tue, 13 Jan 2015 10:02:59 +0000

On 13/01/15 04:06, Zhaopeng Li wrote:
> Platform: Ubuntu 14.10 64-bit
> Coreutils Version 8.23
> 
> 
> 
> At line 534 of coreutils/lib/locale_charset.c, var ‘aliases' points to a buffer which is allocated using malloc() .
> 
> This buffer is not freed when codeset is still an empty string after the loop (Line 534~542).
> 
> So it will be leaked under such situation.
> 
> 
> 
> Line 533    /* Resolve alias. */
> Line 534   for (aliases = get_charset_aliases ();
>        *aliases != '\0';
>        aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
>    if (strcmp (codeset, aliases) == 0
>        || (aliases[0] == '*' && aliases[1] == '\0'))
>      {
>        codeset = aliases + strlen (aliases) + 1;
>        break;
>      }
> 
>   /* Don't return an empty string.  GNU libc and GNU libiconv interpret
>      the empty string as denoting "the locale's character encoding",
>      thus GNU libiconv would call this function a second time.  */
>   if (codeset[0] == '\0')
>    codeset = "ASCII";

What reports this leak?
Note that file name is not present in coreutils?
The code you're referring to is:
http://git.sv.gnu.org/gitweb/?p=gnulib.git;a=blob;f=lib/localcharset.c;h=b4af28cd#l588
Though aliases is never freed here, nor should it be.
What am I missing?

thanks,
Pádraig