Skip to content

Commit

Permalink
Disallow deleting SYMTAB and its elements (onetrueawk#43)
Browse files Browse the repository at this point in the history
  • Loading branch information
melloc authored and arnoldrobbins committed Jun 17, 2019
1 parent fabf9ef commit ae99b75
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 1 deletion.
5 changes: 5 additions & 0 deletions FIXES
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions awk.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
2 changes: 1 addition & 1 deletion main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
3 changes: 3 additions & 0 deletions run.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down

0 comments on commit ae99b75

Please sign in to comment.