From c60077abb1631b53cce873ab9bba69fe2316333b Mon Sep 17 00:00:00 2001 From: gad Date: Mon, 18 Jul 2005 22:18:16 +0000 Subject: [PATCH] Fix minor memory leak when expanding ${variable}s Noticed by: Dave Hart MFC plans: after checking with re@ --- usr.bin/env/envopts.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/usr.bin/env/envopts.c b/usr.bin/env/envopts.c index c62da6d48b57..f8214305cc60 100644 --- a/usr.bin/env/envopts.c +++ b/usr.bin/env/envopts.c @@ -423,6 +423,7 @@ expand_vars(int in_thisarg, char **thisarg_p, char **dest_p, const char **src_p) fprintf(stderr, "#env replacing ${%s} with null string\n", vname); + free(vname); return (NULL); } @@ -435,8 +436,10 @@ expand_vars(int in_thisarg, char **thisarg_p, char **dest_p, const char **src_p) * shorter than the ${VARNAME} reference that it replaces, then our * caller can just copy the value to the existing destination. */ - if (strlen(vname) + 3 >= strlen(vvalue)) + if (strlen(vname) + 3 >= strlen(vvalue)) { + free(vname); return (vvalue); + } /* * The value is longer than the string it replaces, which means the @@ -460,5 +463,6 @@ expand_vars(int in_thisarg, char **thisarg_p, char **dest_p, const char **src_p) *newstr = '\0'; } *dest_p = strchr(newstr, '\0'); + free(vname); return (vvalue); }