From 88c6afdf1c83a7ea51225fbb173d910533c51bb0 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 1 Jun 2016 11:28:15 -0400 Subject: Keep nonposix.h from bothering things on POSIX systems. --- ChangeLog | 6 ++++++ nonposix.h | 2 ++ 2 files changed, 8 insertions(+) diff --git a/ChangeLog b/ChangeLog index 3e2d8d2b..9c9d87bd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2016-06-01 Arnold D. Robbins + + * nonposix.h (getpgrp): Wrap declaration in ifdef so it doesn't + mess things up on POSIX systems (like Solaris). Thanks to + Nelson Beebe for the report. + 2016-05-30 Arnold D. Robbins * main.c (arg_assign): Fully bracket ifdefs around call diff --git a/nonposix.h b/nonposix.h index 3a0510b1..3aae512c 100644 --- a/nonposix.h +++ b/nonposix.h @@ -57,7 +57,9 @@ int unsetenv (const char *); int setenv (const char *, const char *, int); #endif /* __MINGW32__ */ +#if defined(VMS) || defined(__DJGPP__) || defined(__MINGW32__) int getpgrp(void); +#endif #if defined(__DJGPP__) || defined(__MINGW32__) int getppid(void); -- cgit v1.2.3 From 9867841a4767347cd89c9fd0127db3c7eaf943e6 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 1 Jun 2016 11:38:52 -0400 Subject: Disallow negative hex numbers in input data. --- ChangeLog | 3 +++ node.c | 17 +++++++++++++++-- test/ChangeLog | 5 +++++ test/Makefile.am | 5 ++++- test/Makefile.in | 10 +++++++++- test/Maketests | 5 +++++ test/hex2.awk | 1 + test/hex2.in | 2 ++ test/hex2.ok | 2 ++ 9 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 test/hex2.awk create mode 100644 test/hex2.in create mode 100644 test/hex2.ok diff --git a/ChangeLog b/ChangeLog index 9c9d87bd..7c42d77a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,9 @@ * nonposix.h (getpgrp): Wrap declaration in ifdef so it doesn't mess things up on POSIX systems (like Solaris). Thanks to Nelson Beebe for the report. + * node.c (is_hex): New function to check for 0x preceded by + optional sign. + (r_force_number): Use it. Thanks to Mike Brennan for the report. 2016-05-30 Arnold D. Robbins diff --git a/node.c b/node.c index a7c19db1..23199c5b 100644 --- a/node.c +++ b/node.c @@ -38,6 +38,20 @@ NODE *(*str2number)(NODE *) = r_force_number; NODE *(*format_val)(const char *, int, NODE *) = r_format_val; int (*cmp_numbers)(const NODE *, const NODE *) = cmp_awknums; +/* is_hex --- return true if a string looks like a hex value */ + +static bool +is_hex(const char *str) +{ + if (*str == '-' || *str == '+') + str++; + + if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) + return true; + + return false; +} + /* force_number --- force a value to be numeric */ NODE * @@ -96,8 +110,7 @@ r_force_number(NODE *n) || (! do_posix /* not POSIXLY paranoid and */ && (is_alpha((unsigned char) *cp) /* letter, or */ /* CANNOT do non-decimal and saw 0x */ - || (! do_non_decimal_data && cp[0] == '0' - && (cp[1] == 'x' || cp[1] == 'X'))))) { + || (! do_non_decimal_data && is_hex(cp))))) { return n; } diff --git a/test/ChangeLog b/test/ChangeLog index 2e1090ce..02f083d6 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2016-06-01 Arnold D. Robbins + + * Makefile.am (hex2): New test. + * hex2.awk, hex2.in, hex2.ok: New files. + 2016-05-30 Arnold D. Robbins * Makefile.am (fsnul1): New test. diff --git a/test/Makefile.am b/test/Makefile.am index 92e8f6e7..7cd37fdd 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -420,6 +420,9 @@ EXTRA_DIST = \ hello.awk \ hex.awk \ hex.ok \ + hex2.awk \ + hex2.in \ + hex2.ok \ hsprint.awk \ hsprint.ok \ icasefs.awk \ @@ -1064,7 +1067,7 @@ BASIC_TESTS = \ getline getline2 getline3 getline4 getline5 getlnbuf getnr2tb getnr2tm \ gsubasgn gsubtest gsubtst2 gsubtst3 gsubtst4 gsubtst5 gsubtst6 \ gsubtst7 gsubtst8 \ - hex hsprint \ + hex hex2 hsprint \ inpref inputred intest intprec iobug1 \ leaddig leadnl litoct longsub longwrds \ manglprm math membug1 messages minusstr mmap8k mtchi18n \ diff --git a/test/Makefile.in b/test/Makefile.in index 34656eca..23f50afc 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -677,6 +677,9 @@ EXTRA_DIST = \ hello.awk \ hex.awk \ hex.ok \ + hex2.awk \ + hex2.in \ + hex2.ok \ hsprint.awk \ hsprint.ok \ icasefs.awk \ @@ -1320,7 +1323,7 @@ BASIC_TESTS = \ getline getline2 getline3 getline4 getline5 getlnbuf getnr2tb getnr2tm \ gsubasgn gsubtest gsubtst2 gsubtst3 gsubtst4 gsubtst5 gsubtst6 \ gsubtst7 gsubtst8 \ - hex hsprint \ + hex hex2 hsprint \ inpref inputred intest intprec iobug1 \ leaddig leadnl litoct longsub longwrds \ manglprm math membug1 messages minusstr mmap8k mtchi18n \ @@ -3011,6 +3014,11 @@ hex: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +hex2: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + hsprint: @echo $@ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index e5bde1d2..c7b125c7 100644 --- a/test/Maketests +++ b/test/Maketests @@ -415,6 +415,11 @@ hex: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +hex2: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + hsprint: @echo $@ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/hex2.awk b/test/hex2.awk new file mode 100644 index 00000000..49c6203d --- /dev/null +++ b/test/hex2.awk @@ -0,0 +1 @@ +{ print $1 + 7} diff --git a/test/hex2.in b/test/hex2.in new file mode 100644 index 00000000..60f06f0f --- /dev/null +++ b/test/hex2.in @@ -0,0 +1,2 @@ +0x4 +-0x4 diff --git a/test/hex2.ok b/test/hex2.ok new file mode 100644 index 00000000..49019db8 --- /dev/null +++ b/test/hex2.ok @@ -0,0 +1,2 @@ +7 +7 -- cgit v1.2.3