Update awk to Dec 15, 2022 version.
authormillert <millert@openbsd.org>
Sat, 9 Sep 2023 18:59:43 +0000 (18:59 +0000)
committermillert <millert@openbsd.org>
Sat, 9 Sep 2023 18:59:43 +0000 (18:59 +0000)
Force hex escapes in strings to be no more than two characters, as
they already are in regular expressions. This brings internal
consistency, as well as consistency with gawk.

usr.bin/awk/FIXES
usr.bin/awk/lex.c
usr.bin/awk/main.c

index fdf782e..53c7841 100644 (file)
@@ -25,6 +25,12 @@ THIS SOFTWARE.
 This file lists all bug fixes, changes, etc., made since the AWK book
 was sent to the printers in August 1987.
 
+Dec 15, 2022:
+       Force hex escapes in strings to be no more than two characters,
+       as they already are in regular expressions. This brings internal
+       consistency, as well as consistency with gawk. Thanks to
+       Arnold Robbins.
+
 Sep 12, 2022:
        adjbuf minlen error (cannot be 0) in cat, resulting in NULL pbuf.
        discovered by todd miller. also use-after-free issue with
index 39c9a05..213f5d0 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: lex.c,v 1.28 2022/09/01 15:21:28 millert Exp $        */
+/*     $OpenBSD: lex.c,v 1.29 2023/09/09 18:59:43 millert Exp $        */
 /****************************************************************
 Copyright (C) Lucent Technologies 1997
 All Rights Reserved
@@ -427,19 +427,28 @@ int string(void)
                                break;
 
                        case 'x':       /* hex  \x0-9a-fA-F + */
-                           {   char xbuf[100], *px;
-                               for (px = xbuf; (c = input()) != 0 && px-xbuf < 100-2; ) {
-                                       if (isdigit(c)
-                                        || (c >= 'a' && c <= 'f')
-                                        || (c >= 'A' && c <= 'F'))
-                                               *px++ = c;
-                                       else
+                           {
+                               int i;
+
+                               n = 0;
+                               for (i = 1; i <= 2; i++) {
+                                       c = input();
+                                       if (c == 0)
+                                               break;
+                                       if (isxdigit(c)) {
+                                               c = tolower(c);
+                                               n *= 16;
+                                               if (isdigit(c))
+                                                       n += (c - '0');
+                                               else
+                                                       n += 10 + (c - 'a');
+                                       } else
                                                break;
                                }
-                               *px = 0;
-                               unput(c);
-                               sscanf(xbuf, "%x", (unsigned int *) &n);
-                               *bp++ = n;
+                               if (n)
+                                       *bp++ = n;
+                               else
+                                       unput(c);
                                break;
                            }
 
index 4b05766..ccd557c 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: main.c,v 1.56 2022/09/21 01:42:58 millert Exp $       */
+/*     $OpenBSD: main.c,v 1.57 2023/09/09 18:59:43 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 20220912";
+const char     *version = "version 20221215";
 
 #define DEBUG
 #include <stdio.h>