diff options
author | Jacob Moody <moody@posixcafe.org> | 2023-04-06 02:50:09 +0000 |
---|---|---|
committer | Jacob Moody <moody@posixcafe.org> | 2023-04-06 02:50:09 +0000 |
commit | 9ab4f2a2428ef5ad2f4abc118f589bd70f6c2f90 (patch) | |
tree | 0084ac799f3a297948342989168d35c27dd6d448 | |
parent | 27a63ae22975171efbee5549d100f416ccb4066a (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
-rw-r--r-- | sys/src/cmd/awk/run.c | 7 |
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; |