summaryrefslogtreecommitdiff
path: root/sys/src/cmd
diff options
context:
space:
mode:
authorJacob Moody <moody@posixcafe.org>2023-04-06 02:59:11 +0000
committerJacob Moody <moody@posixcafe.org>2023-04-06 02:59:11 +0000
commit26e42d115979009c9fe144e1c28f740485537674 (patch)
treec9bbd6e3770c617765357b1a2686789dade9845e /sys/src/cmd
parent9ab4f2a2428ef5ad2f4abc118f589bd70f6c2f90 (diff)
awk: getline: do not access unitialized data on EOF
echo 'a' | awk 'BEGIN { getline l; getline l; print (s=substr(l,1,10)) " len=" length(s) }' https://github.com/onetrueawk/awk/commit/1debe1993fc852545a9215621d884be27f08a223
Diffstat (limited to 'sys/src/cmd')
-rw-r--r--sys/src/cmd/awk/run.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/src/cmd/awk/run.c b/sys/src/cmd/awk/run.c
index 3f049658d..afe4026cb 100644
--- a/sys/src/cmd/awk/run.c
+++ b/sys/src/cmd/awk/run.c
@@ -438,10 +438,12 @@ Cell *getline(Node **a, int n) /* get next line from specific input */
n = getrec(&record, &recsize, 1);
else { /* getline var */
n = getrec(&buf, &bufsize, 0);
- x = execute(a[0]);
- setsval(x, buf);
- if (istemp(x))
- tfree(x);
+ if (n > 0) {
+ x = execute(a[0]);
+ setsval(x, buf);
+ if (istemp(x))
+ tfree(x);
+ }
}
}
setfval(r, (Awkfloat) n);