diff options
author | Cody Mello <melloc@writev.io> | 2019-06-17 10:08:54 -0900 |
---|---|---|
committer | Arnold Robbins <arnold@skeeve.com> | 2019-06-17 22:08:54 +0300 |
commit | ae99b752af2f72bae5d4948f5b2e31dac0409601 (patch) | |
tree | 8bd930184186cb84833dfe57706844d06d991469 | |
parent | fabf9efece19b24f11aa26dd4b63f7af52ab4bcc (diff) | |
download | one-true-awk-ae99b752af2f72bae5d4948f5b2e31dac0409601.tar.gz |
Disallow deleting SYMTAB and its elements (#43)
-rw-r--r-- | FIXES | 5 | ||||
-rw-r--r-- | awk.h | 1 | ||||
-rw-r--r-- | main.c | 2 | ||||
-rw-r--r-- | run.c | 3 |
4 files changed, 10 insertions, 1 deletions
@@ -25,6 +25,11 @@ THIS SOFTWARE. This file lists all bug fixes, changes, etc., made since the AWK book was sent to the printers in August, 1987. +June 17, 2019: + Disallow deleting SYMTAB and its elements, which creates + use-after-free bugs. Thanks to GitHub user Cody Mello (melloc) + for the fix. (Merged from PR #43.) + June 5, 2019: Allow unmatched right parenthesis in a regular expression to be treated literally. Fixes Issue #40. Thanks to GitHub user @@ -105,6 +105,7 @@ extern Cell *rsloc; /* RS */ extern Cell *rstartloc; /* RSTART */ extern Cell *rlengthloc; /* RLENGTH */ extern Cell *subseploc; /* SUBSEP */ +extern Cell *symtabloc; /* SYMTAB */ /* Cell.tval values: */ #define NUM 01 /* number value is valid */ @@ -22,7 +22,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ****************************************************************/ -const char *version = "version 20190605"; +const char *version = "version 20190617"; #define DEBUG #include <stdio.h> @@ -512,6 +512,9 @@ Cell *awkdelete(Node **a, int n) /* a[0] is symtab, a[1] is list of subscripts * int nsub; x = execute(a[0]); /* Cell* for symbol table */ + if (x == symtabloc) { + FATAL("cannot delete SYMTAB or its elements"); + } if (!isarr(x)) return True; if (a[1] == 0) { /* delete the elements, not the table */ |