lib/colors: fix double free on error path

The error path was a bit unclear on the semantics. The seq argument
would get freed but not the name argument. Then the caller frees
them both when the function returns an error.
This fixes the problem my making the function not touch the arguments
unless we're going to return success. Also improve the description
for this function to make it more obvious what the callers should expect.

Addresses: CID#77487 (on scan.coverity.com for JIghtuse/util-linux)
Signed-off-by: Andreas Henriksson <andreas@fatal.se>
This commit is contained in:
Andreas Henriksson 2014-11-19 12:03:35 +01:00 committed by Karel Zak
parent cd2876d252
commit a72de3cf64
1 changed files with 5 additions and 3 deletions

View File

@ -438,8 +438,9 @@ static int cn_sequence(const char *str, char **seq)
/*
* Adds one color sequence to array with color scheme,
* @seq and @name have to be allocated strings
* Adds one color sequence to array with color scheme.
* When returning success (0) this function takes ownership of
* @seq and @name, which have to be allocated strings.
*/
static int colors_add_scheme(struct ul_color_ctl *cc,
char *name,
@ -455,7 +456,6 @@ static int colors_add_scheme(struct ul_color_ctl *cc,
DBG(SCHEME, ul_debug("add '%s'", name));
rc = cn_sequence(seq0, &seq);
free(seq0);
if (rc)
return rc;
@ -485,6 +485,8 @@ static int colors_add_scheme(struct ul_color_ctl *cc,
cc->schemes_sz = cc->nschemes + 10;
}
free(seq0);
/* add a new item */
cs = &cc->schemes[cc->nschemes++];
cs->name = name;