btrace(8): fix lexer to allow whitespace after filters.
authordv <dv@openbsd.org>
Thu, 28 Apr 2022 21:04:24 +0000 (21:04 +0000)
committerdv <dv@openbsd.org>
Thu, 28 Apr 2022 21:04:24 +0000 (21:04 +0000)
Whitespace is allowed after the closing slash of a filter and before
the opening brace of an action. This makes the lexer scan ahead and
collect any whitespace and newlines into the end of filter token.

ok mpi@

usr.sbin/btrace/bt_parse.y

index dd4b0c4..b8d0b68 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: bt_parse.y,v 1.45 2021/11/12 16:57:24 claudio Exp $   */
+/*     $OpenBSD: bt_parse.y,v 1.46 2022/04/28 21:04:24 dv Exp $        */
 
 /*
  * Copyright (c) 2019-2021 Martin Pieuchot <mpi@openbsd.org>
@@ -839,9 +839,14 @@ again:
                }
                return c;
        case '/':
-               if (peek() == '{' || peek() == '/' || peek() == '\n') {
-                       return ENDFILT;
+               while (isspace(peek())) {
+                       if (lgetc() == '\n') {
+                               yylval.lineno++;
+                               yylval.colno = 0;
+                       }
                }
+               if (peek() == '{' || peek() == '/' || peek() == '\n')
+                       return ENDFILT;
                /* FALLTHROUGH */
        case ',':
        case '(':