From: Andrew Deason Date: Thu, 24 May 2012 19:53:59 +0000 (-0500) Subject: cmd: Avoid premature OptionAsString free X-Git-Tag: upstream/1.8.0_pre1^2~2320 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=e1ff7148cce62f7c34614dc1ac1edc909dea1c55;p=packages%2Fo%2Fopenafs.git cmd: Avoid premature OptionAsString free Only free the previously-set string value if we're actually going to change it. This avoids the scenario where a caller does something like: char *str = strdup("defaultval"); /* ... */ cmd_OptionAsString(as, OPT_foo, &str); resulting in 'str' pointing to freed memory when the relevant option is not specified, or there is some other error. Change-Id: If1f94d5eb39cc4dba9a4195ff20850ff81737eb9 Reviewed-on: http://gerrit.openafs.org/7475 Reviewed-by: Jeffrey Altman Reviewed-by: Derrick Brashear Tested-by: BuildBot --- diff --git a/src/cmd/cmd.c b/src/cmd/cmd.c index 903dc94dc..1c5786ee8 100644 --- a/src/cmd/cmd.c +++ b/src/cmd/cmd.c @@ -1358,9 +1358,6 @@ cmd_OptionAsString(struct cmd_syndesc *syn, int pos, char **value) const char *str; int code; - if (*value) - free(*value); - code = _get_config_string(syn, pos, &str); if (code) return code; @@ -1368,6 +1365,8 @@ cmd_OptionAsString(struct cmd_syndesc *syn, int pos, char **value) if (str == NULL) return CMD_MISSING; + if (*value) + free(*value); *value = strdup(str); return 0;