summaryrefslogtreecommitdiff
path: root/sys/src/cmd/awk
diff options
context:
space:
mode:
authorJacob Moody <moody@posixcafe.org>2023-04-06 02:50:09 +0000
committerJacob Moody <moody@posixcafe.org>2023-04-06 02:50:09 +0000
commit9ab4f2a2428ef5ad2f4abc118f589bd70f6c2f90 (patch)
tree0084ac799f3a297948342989168d35c27dd6d448 /sys/src/cmd/awk
parent27a63ae22975171efbee5549d100f416ccb4066a (diff)
awk: dont leak memory on extra format arguments
awk 'BEGIN { while(++i <= 100000) { mem = "ps | grep awk"; printf("%d", 1+2, 3+4, 5+6, 7+8, 9+0) > "/dev/null"; if(i % 10000 == 0) system(mem) }}' https://github.com/onetrueawk/awk/commit/821c502359855d0c43be8e9b08f037ecb543d310
Diffstat (limited to 'sys/src/cmd/awk')
-rw-r--r--sys/src/cmd/awk/run.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/src/cmd/awk/run.c b/sys/src/cmd/awk/run.c
index 090410314..3f049658d 100644
--- a/sys/src/cmd/awk/run.c
+++ b/sys/src/cmd/awk/run.c
@@ -973,8 +973,11 @@ int format(char **pbuf, int *pbufsize, char *s, Node *a) /* printf-like conversi
}
*p = '\0';
free(fmt);
- for ( ; a; a = a->nnext) /* evaluate any remaining args */
- execute(a);
+ for ( ; a; a = a->nnext) { /* evaluate any remaining args */
+ x = execute(a);
+ if (istemp(x))
+ tfree(x);
+ }
*pbuf = buf;
*pbufsize = bufsize;
return p - buf;