From 9ab4f2a2428ef5ad2f4abc118f589bd70f6c2f90 Mon Sep 17 00:00:00 2001 From: Jacob Moody Date: Thu, 6 Apr 2023 02:50:09 +0000 Subject: 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 --- sys/src/cmd/awk/run.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'sys/src') 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; -- cgit v1.2.3