Module Name:    src
Committed By:   rillig
Date:           Wed Jun 14 17:52:46 UTC 2023

Modified Files:
        src/usr.bin/indent: parse.c

Log Message:
indent: fix out-of-bounds read when reducing a statement

Since parse.c 1.73 from today. The parser symbol psym_stmt_list that was
removed in that commit acted as a stop symbol, so that psyms_reduce_stmt
would save a memory access.


To generate a diff of this commit:
cvs rdiff -u -r1.74 -r1.75 src/usr.bin/indent/parse.c

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

Modified files:

Index: src/usr.bin/indent/parse.c
diff -u src/usr.bin/indent/parse.c:1.74 src/usr.bin/indent/parse.c:1.75
--- src/usr.bin/indent/parse.c:1.74	Wed Jun 14 16:14:30 2023
+++ src/usr.bin/indent/parse.c	Wed Jun 14 17:52:45 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: parse.c,v 1.74 2023/06/14 16:14:30 rillig Exp $	*/
+/*	$NetBSD: parse.c,v 1.75 2023/06/14 17:52:45 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: parse.c,v 1.74 2023/06/14 16:14:30 rillig Exp $");
+__RCSID("$NetBSD: parse.c,v 1.75 2023/06/14 17:52:45 rillig Exp $");
 
 #include <err.h>
 
@@ -116,7 +116,7 @@ static void
 psyms_reduce(struct psym_stack *psyms)
 {
 again:
-	if (psyms->sym[psyms->len - 1] == psym_stmt
+	if (psyms->len >= 2 && psyms->sym[psyms->len - 1] == psym_stmt
 	    && psyms_reduce_stmt(psyms))
 		goto again;
 	if (psyms->sym[psyms->len - 1] == psym_while_expr &&

Reply via email to