shithub: trueawk

Download patch

ref: 3358f3f36b956bc8595e6e8ea0f6373e8f44f1f9
parent: 7db55ba13f856c868b23a83dc3e10fa9fbc5fa3b
author: Arnold D. Robbins <arnold@skeeve.com>
date: Wed Jan 1 17:42:20 EST 2020

Cleanups from valgrind.

--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2020-01-01         Arnold D. Robbins     <arnold@skeeve.com>
+
+	* tran.c (syminit, arginit, envinit): Free sval member before
+	setting it. Thanks to valgrind.
+
 2019-12-27         Arnold D. Robbins     <arnold@skeeve.com>
 
 	* b.c (replace_repeat): Fix a bug whereby a{0,3} could match
--- a/tran.c
+++ b/tran.c
@@ -114,6 +114,7 @@
 	rlengthloc = setsymtab("RLENGTH", "", 0.0, NUM, symtab);
 	RLENGTH = &rlengthloc->fval;
 	symtabloc = setsymtab("SYMTAB", "", 0.0, ARR, symtab);
+	free(symtabloc->sval);
 	symtabloc->sval = (char *) symtab;
 }
 
@@ -126,6 +127,7 @@
 	ARGC = &setsymtab("ARGC", "", (Awkfloat) ac, NUM, symtab)->fval;
 	cp = setsymtab("ARGV", "", 0.0, ARR, symtab);
 	ARGVtab = makesymtab(NSYMTAB);	/* could be (int) ARGC as well */
+	free(cp->sval);
 	cp->sval = (char *) ARGVtab;
 	for (i = 0; i < ac; i++) {
 		sprintf(temp, "%d", i);
@@ -144,6 +146,7 @@
 
 	cp = setsymtab("ENVIRON", "", 0.0, ARR, symtab);
 	ENVtab = makesymtab(NSYMTAB);
+	free(cp->sval);
 	cp->sval = (char *) ENVtab;
 	for ( ; *envp; envp++) {
 		if ((p = strchr(*envp, '=')) == NULL)
--