Module Name:    src
Committed By:   rillig
Date:           Sat Jun 19 08:37:18 UTC 2021

Modified Files:
        src/tests/usr.bin/xlint/lint1: lex_string.c lex_string.exp
        src/usr.bin/xlint/lint1: lex.c

Log Message:
lint: revert fix for endless loop in lexer for string literals

String literals may contain null bytes, and these must be passed further
on.

This reintroduces the endless loop in the lexer, but that must be fixed
in another way that doesn't destroy the error handling.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/tests/usr.bin/xlint/lint1/lex_string.c \
    src/tests/usr.bin/xlint/lint1/lex_string.exp
cvs rdiff -u -r1.38 -r1.39 src/usr.bin/xlint/lint1/lex.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/usr.bin/xlint/lint1/lex_string.c
diff -u src/tests/usr.bin/xlint/lint1/lex_string.c:1.1 src/tests/usr.bin/xlint/lint1/lex_string.c:1.2
--- src/tests/usr.bin/xlint/lint1/lex_string.c:1.1	Sat Jun 19 08:30:08 2021
+++ src/tests/usr.bin/xlint/lint1/lex_string.c	Sat Jun 19 08:37:18 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: lex_string.c,v 1.1 2021/06/19 08:30:08 rillig Exp $	*/
+/*	$NetBSD: lex_string.c,v 1.2 2021/06/19 08:37:18 rillig Exp $	*/
 # 3 "lex_string.c"
 
 /*
@@ -18,18 +18,11 @@ test(void)
 
 	sink("\0");
 
-	/* expect+5: unknown character \134 */
-	/* expect+4: syntax error '0' */
-	/* expect+3: unknown character \134 */
-	/* expect+2: unknown character \134 */
-	/* expect+1: unknown character \134 */
 	sink("\0\0\0\0");
 
-	/* expect+1: unknown character \134 */
+	/* expect+1: no hex digits follow \x [74] */
 	sink("\x");		/* unfinished */
 
-	/* expect+1: unknown character \134 */
+	/* expect+1: dubious escape \y [79] */
 	sink("\y");		/* unknown escape sequence */
 }
-
-/* expect+1: cannot recover from previous errors */
Index: src/tests/usr.bin/xlint/lint1/lex_string.exp
diff -u src/tests/usr.bin/xlint/lint1/lex_string.exp:1.1 src/tests/usr.bin/xlint/lint1/lex_string.exp:1.2
--- src/tests/usr.bin/xlint/lint1/lex_string.exp:1.1	Sat Jun 19 08:30:08 2021
+++ src/tests/usr.bin/xlint/lint1/lex_string.exp	Sat Jun 19 08:37:18 2021
@@ -1,8 +1,2 @@
-lex_string.c(26): error: unknown character \134 [250]
-lex_string.c(26): error: syntax error '0' [249]
-lex_string.c(26): error: unknown character \134 [250]
-lex_string.c(26): error: unknown character \134 [250]
-lex_string.c(26): error: unknown character \134 [250]
-lex_string.c(29): error: unknown character \134 [250]
-lex_string.c(32): error: unknown character \134 [250]
-lex_string.c(36): error: cannot recover from previous errors [224]
+lex_string.c(24): error: no hex digits follow \x [74]
+lex_string.c(27): warning: dubious escape \y [79]

Index: src/usr.bin/xlint/lint1/lex.c
diff -u src/usr.bin/xlint/lint1/lex.c:1.38 src/usr.bin/xlint/lint1/lex.c:1.39
--- src/usr.bin/xlint/lint1/lex.c:1.38	Fri Jun 18 20:29:00 2021
+++ src/usr.bin/xlint/lint1/lex.c	Sat Jun 19 08:37:18 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: lex.c,v 1.38 2021/06/18 20:29:00 rillig Exp $ */
+/* $NetBSD: lex.c,v 1.39 2021/06/19 08:37:18 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: lex.c,v 1.38 2021/06/18 20:29:00 rillig Exp $");
+__RCSID("$NetBSD: lex.c,v 1.39 2021/06/19 08:37:18 rillig Exp $");
 #endif
 
 #include <ctype.h>
@@ -1304,7 +1304,7 @@ lex_string(void)
 	s = xmalloc(max = 64);
 
 	len = 0;
-	while ((c = get_escaped_char('"')) > 0) {
+	while ((c = get_escaped_char('"')) >= 0) {
 		/* +1 to reserve space for a trailing NUL character */
 		if (len + 1 == max)
 			s = xrealloc(s, max *= 2);

Reply via email to