git: d4d252c49976 - main - awk: revert upstream's attempt to disallow hex strings
Warner Losh
imp at FreeBSD.org
Thu Jul 15 23:08:27 UTC 2021
The branch main has been updated by imp:
URL: https://cgit.FreeBSD.org/src/commit/?id=d4d252c49976de33d0a2926df733744d0b8d95fa
commit d4d252c49976de33d0a2926df733744d0b8d95fa
Author: Warner Losh <imp at FreeBSD.org>
AuthorDate: 2021-07-15 22:46:06 +0000
Commit: Warner Losh <imp at FreeBSD.org>
CommitDate: 2021-07-15 23:08:03 +0000
awk: revert upstream's attempt to disallow hex strings
Upstream one-true-awk decided to disallow hex strings as numbers. This
is in line with awk's behavior prior to C99, and allowed by the POSIX
standard. The standard, however, allows them to be treated as numbers
because that's what the standard said in the 2001 through 2004 editions.
Since 2001, the nawk in FreeBSD has treated them as numbers, so restore
that behavior, allowed by the standard.
A number of scripts in the FreeBSD tree depend on this interpretation,
including scripts to build the kernel which had mysteriously started
failing for some people and not others. By re-allowing 0x hex numbers,
this fixes those scripts and restores POLA.
Upstream issue: https://github.com/onetrueawk/awk/issues/126
Sponsored by: Netflix
Reviewed by: kevans
MFC After: asap due to regression alrady merged to stable
Differential Revision: https://reviews.freebsd.org/D31199
---
contrib/one-true-awk/lib.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/contrib/one-true-awk/lib.c b/contrib/one-true-awk/lib.c
index 18adbd2d1fd6..6bfe5e8eaad9 100644
--- a/contrib/one-true-awk/lib.c
+++ b/contrib/one-true-awk/lib.c
@@ -793,9 +793,18 @@ bool is_valid_number(const char *s, bool trailing_stuff_ok,
while (isspace(*s))
s++;
+/*
+ * This test, while allowed by newer POSIX standards, represents a regression
+ * where hex strings were treated as numbers in nawk the whole time it has been
+ * in FreeBSD (since 2001). The POSIX 2001 through 2004 standards mandated this
+ * behavior and the current standard allows it. Deviate from upstream by restoring
+ * the prior FreeBSD behavior.
+ */
+#if 0
// no hex floating point, sorry
if (s[0] == '0' && tolower(s[1]) == 'x')
return false;
+#endif
// allow +nan, -nan, +inf, -inf, any other letter, no
if (s[0] == '+' || s[0] == '-') {
More information about the dev-commits-src-all
mailing list