diff options
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/awk/FIXES | 30 | ||||
-rw-r--r-- | usr.bin/awk/b.c | 4 | ||||
-rw-r--r-- | usr.bin/awk/lib.c | 3 | ||||
-rw-r--r-- | usr.bin/awk/main.c | 6 | ||||
-rw-r--r-- | usr.bin/awk/maketab.c | 4 | ||||
-rw-r--r-- | usr.bin/awk/proto.h | 4 | ||||
-rw-r--r-- | usr.bin/awk/run.c | 13 |
7 files changed, 48 insertions, 16 deletions
diff --git a/usr.bin/awk/FIXES b/usr.bin/awk/FIXES index b318e2a1a72..fe3273c9647 100644 --- a/usr.bin/awk/FIXES +++ b/usr.bin/awk/FIXES @@ -1,4 +1,4 @@ -/* $OpenBSD: FIXES,v 1.14 2008/10/06 20:38:33 millert Exp $ */ +/* $OpenBSD: FIXES,v 1.15 2010/06/13 17:58:19 millert Exp $ */ /**************************************************************** Copyright (C) Lucent Technologies 1997 All Rights Reserved @@ -26,6 +26,34 @@ THIS SOFTWARE. This file lists all bug fixes, changes, etc., made since the AWK book was sent to the printers in August, 1987. +May 23, 2010: + fixed long-standing overflow bug in run.c; many thanks to + nelson beebe for spotting it and providing the fix. + + fixed bug that didn't parse -vd=1 properly; thanks to santiago + vila for spotting it. + +Feb 8, 2010: + i give up. replaced isblank with isspace in b.c; there are + no consistent header files. + +Nov 26, 2009: + fixed a long-standing issue with when FS takes effect. a + change to FS is now noticed immediately for subsequent splits. + + changed the name getline() to awkgetline() to avoid yet another + name conflict somewhere. + +Feb 11, 2009: + temporarily for now defined HAS_ISBLANK, since that seems to + be the best way through the thicket. isblank arrived in C99, + but seems to be arriving at different systems at different + times. + +Oct 8, 2008: + fixed typo in b.c that set tmpvec wrongly. no one had ever + run into the problem, apparently. thanks to alistair crooks. + Oct 23, 2007: minor fix in lib.c: increase inputFS to 100, change malloc for fields to n+1. diff --git a/usr.bin/awk/b.c b/usr.bin/awk/b.c index 03018c10012..cc7ac3559b1 100644 --- a/usr.bin/awk/b.c +++ b/usr.bin/awk/b.c @@ -1,4 +1,4 @@ -/* $OpenBSD: b.c,v 1.15 2008/10/06 20:38:33 millert Exp $ */ +/* $OpenBSD: b.c,v 1.16 2010/06/13 17:58:19 millert Exp $ */ /**************************************************************** Copyright (C) Lucent Technologies 1997 All Rights Reserved @@ -877,7 +877,7 @@ int cgoto(fa *f, int s, int c) if (q[j] >= maxsetvec) { maxsetvec *= 4; setvec = (int *) realloc(setvec, maxsetvec * sizeof(int)); - tmpset = (int *) realloc(setvec, maxsetvec * sizeof(int)); + tmpset = (int *) realloc(tmpset, maxsetvec * sizeof(int)); if (setvec == 0 || tmpset == 0) overflo("cgoto overflow"); } diff --git a/usr.bin/awk/lib.c b/usr.bin/awk/lib.c index afbac925c73..bd3bbddd816 100644 --- a/usr.bin/awk/lib.c +++ b/usr.bin/awk/lib.c @@ -1,4 +1,4 @@ -/* $OpenBSD: lib.c,v 1.18 2008/10/06 20:38:33 millert Exp $ */ +/* $OpenBSD: lib.c,v 1.19 2010/06/13 17:58:19 millert Exp $ */ /**************************************************************** Copyright (C) Lucent Technologies 1997 All Rights Reserved @@ -276,6 +276,7 @@ void fldbld(void) /* create fields from current record */ } fr = fields; i = 0; /* number of fields accumulated here */ + strlcpy(inputFS, *FS, sizeof(inputFS)); if (strlen(inputFS) > 1) { /* it's a regular expression */ i = refldbld(r, inputFS); } else if ((sep = *inputFS) == ' ') { /* default whitespace */ diff --git a/usr.bin/awk/main.c b/usr.bin/awk/main.c index d4e52329b43..b000be6f381 100644 --- a/usr.bin/awk/main.c +++ b/usr.bin/awk/main.c @@ -1,4 +1,4 @@ -/* $OpenBSD: main.c,v 1.15 2008/10/06 20:38:33 millert Exp $ */ +/* $OpenBSD: main.c,v 1.16 2010/06/13 17:58:19 millert Exp $ */ /**************************************************************** Copyright (C) Lucent Technologies 1997 All Rights Reserved @@ -23,7 +23,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ****************************************************************/ -const char *version = "version 20071023"; +const char *version = "version 20100523"; #define DEBUG #include <stdio.h> @@ -112,6 +112,8 @@ int main(int argc, char *argv[]) case 'v': /* -v a=1 to be done NOW. one -v for each */ if (argv[1][2] == '\0' && --argc > 1 && isclvar((++argv)[1])) setclvar(argv[1]); + else if (argv[1][2] != '\0') + setclvar(&argv[1][2]); break; case 'd': dbg = atoi(&argv[1][2]); diff --git a/usr.bin/awk/maketab.c b/usr.bin/awk/maketab.c index 01e9aff4be6..84aef727031 100644 --- a/usr.bin/awk/maketab.c +++ b/usr.bin/awk/maketab.c @@ -1,4 +1,4 @@ -/* $OpenBSD: maketab.c,v 1.10 2008/10/06 20:38:33 millert Exp $ */ +/* $OpenBSD: maketab.c,v 1.11 2010/06/13 17:58:19 millert Exp $ */ /**************************************************************** Copyright (C) Lucent Technologies 1997 All Rights Reserved @@ -103,7 +103,7 @@ struct xx { CALL, "call", "call" }, { ARG, "arg", "arg" }, { VARNF, "getnf", "NF" }, - { GETLINE, "getline", "getline" }, + { GETLINE, "awkgetline", "getline" }, { 0, "", "" }, }; diff --git a/usr.bin/awk/proto.h b/usr.bin/awk/proto.h index 934200d300a..07c558b7633 100644 --- a/usr.bin/awk/proto.h +++ b/usr.bin/awk/proto.h @@ -1,4 +1,4 @@ -/* $OpenBSD: proto.h,v 1.7 2002/12/19 21:24:28 millert Exp $ */ +/* $OpenBSD: proto.h,v 1.8 2010/06/13 17:58:19 millert Exp $ */ /**************************************************************** Copyright (C) Lucent Technologies 1997 All Rights Reserved @@ -150,7 +150,7 @@ extern Cell *call(Node **, int); extern Cell *copycell(Cell *); extern Cell *arg(Node **, int); extern Cell *jump(Node **, int); -extern Cell *getline(Node **, int); +extern Cell *awkgetline(Node **, int); extern Cell *getnf(Node **, int); extern Cell *array(Node **, int); extern Cell *awkdelete(Node **, int); diff --git a/usr.bin/awk/run.c b/usr.bin/awk/run.c index 8f19cf7d680..f92dd503276 100644 --- a/usr.bin/awk/run.c +++ b/usr.bin/awk/run.c @@ -1,4 +1,4 @@ -/* $OpenBSD: run.c,v 1.30 2008/10/06 20:38:33 millert Exp $ */ +/* $OpenBSD: run.c,v 1.31 2010/06/13 17:58:19 millert Exp $ */ /**************************************************************** Copyright (C) Lucent Technologies 1997 All Rights Reserved @@ -391,7 +391,7 @@ Cell *jump(Node **a, int n) /* break, continue, next, nextfile, return */ return 0; /* not reached */ } -Cell *getline(Node **a, int n) /* get next line from specific input */ +Cell *awkgetline(Node **a, int n) /* get next line from specific input */ { /* a[0] is variable, a[1] is operator, a[2] is filename */ Cell *r, *x; extern Cell **fldtab; @@ -1167,11 +1167,11 @@ Cell *cat(Node **a, int q) /* a[0] cat a[1] */ x->sval, y->sval); strlcpy(s, x->sval, len); strlcpy(s+n1, y->sval, len - n1); + tempfree(x); tempfree(y); z = gettemp(); z->sval = s; z->tval = STR; - tempfree(x); return(z); } @@ -1956,9 +1956,10 @@ Cell *gsub(Node **a, int nnn) /* global substitute */ adjbuf(&buf, &bufsz, 1+strlen(sptr)+pb-buf, 0, &pb, "gsub"); while ((*pb++ = *sptr++) != 0) ; - done: if (pb > buf + bufsz) - FATAL("gsub result2 %.30s too big; can't happen", buf); - *pb = '\0'; + done: if (pb < buf + bufsz) + *pb = '\0'; + else if (*(pb-1) != '\0') + FATAL("gsub result2 %.30s truncated; can't happen", buf); setsval(x, buf); /* BUG: should be able to avoid copy + free */ pfa->initstat = tempstat; } |