From e1ff7148cce62f7c34614dc1ac1edc909dea1c55 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Thu, 24 May 2012 14:53:59 -0500 Subject: [PATCH] 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 --- src/cmd/cmd.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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; -- 2.39.5