Module Name:    src
Committed By:   rillig
Date:           Sat May 13 17:54:34 UTC 2023

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

Log Message:
indent: prevent undefined behavior on unbalanced parentheses


To generate a diff of this commit:
cvs rdiff -u -r1.263 -r1.264 src/usr.bin/indent/indent.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/indent.c
diff -u src/usr.bin/indent/indent.c:1.263 src/usr.bin/indent/indent.c:1.264
--- src/usr.bin/indent/indent.c:1.263	Sat May 13 17:20:41 2023
+++ src/usr.bin/indent/indent.c	Sat May 13 17:54:34 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: indent.c,v 1.263 2023/05/13 17:20:41 rillig Exp $	*/
+/*	$NetBSD: indent.c,v 1.264 2023/05/13 17:54:34 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -43,7 +43,7 @@ static char sccsid[] = "@(#)indent.c	5.1
 
 #include <sys/cdefs.h>
 #if defined(__NetBSD__)
-__RCSID("$NetBSD: indent.c,v 1.263 2023/05/13 17:20:41 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.264 2023/05/13 17:54:34 rillig Exp $");
 #elif defined(__FreeBSD__)
 __FBSDID("$FreeBSD: head/usr.bin/indent/indent.c 340138 2018-11-04 19:24:49Z oshogbo $");
 #endif
@@ -507,6 +507,11 @@ process_lparen_or_lbracket(void)
 static void
 process_rparen_or_rbracket(void)
 {
+    if (ps.nparen == 0) {
+	diag(0, "Extra '%c'", *token.s);
+	goto unbalanced;	/* TODO: better exit immediately */
+    }
+
     if (ps.paren[ps.nparen - 1].maybe_cast &&
 	!ps.paren[ps.nparen - 1].no_cast) {
 	ps.next_unary = true;
@@ -518,12 +523,11 @@ process_rparen_or_rbracket(void)
 
     if (ps.nparen > 0)
 	ps.nparen--;
-    else
-	diag(0, "Extra '%c'", *token.s);
 
     if (code.e == code.s)	/* if the paren starts the line */
 	ps.line_start_nparen = ps.nparen;	/* then indent it */
 
+unbalanced:
     *code.e++ = token.s[0];
 
     if (ps.spaced_expr_psym != psym_0 && ps.nparen == 0) {

Reply via email to