Module Name:    src
Committed By:   rillig
Date:           Tue Oct  5 17:12:20 UTC 2021

Modified Files:
        src/tests/usr.bin/indent: ps_ind_level.0
        src/usr.bin/indent: indent.c

Log Message:
indent: make off-by-one error in main_prepare_parsing more visible

No functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/tests/usr.bin/indent/ps_ind_level.0
cvs rdiff -u -r1.105 -r1.106 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/tests/usr.bin/indent/ps_ind_level.0
diff -u src/tests/usr.bin/indent/ps_ind_level.0:1.1 src/tests/usr.bin/indent/ps_ind_level.0:1.2
--- src/tests/usr.bin/indent/ps_ind_level.0:1.1	Tue Oct  5 17:09:45 2021
+++ src/tests/usr.bin/indent/ps_ind_level.0	Tue Oct  5 17:12:20 2021
@@ -1,10 +1,10 @@
-/* $NetBSD: ps_ind_level.0,v 1.1 2021/10/05 17:09:45 rillig Exp $ */
+/* $NetBSD: ps_ind_level.0,v 1.2 2021/10/05 17:12:20 rillig Exp $ */
 /* $FreeBSD$ */
 /* $ */
 /* $ The leading indentation in the first line determines the indentation */
 /* $ of the remaining code. In this particular test, the indentation is set */
 /* $ to 5 and the tabulator is set to 8, to demonstrate an off-by-one error */
-/* $ in main_prepare_parsing that has been fixed in indent.c 1.106 from */
+/* $ in main_prepare_parsing that has been fixed in indent.c 1.107 from */
 /* $ 2021-10-05. */
 /* $ */
 /* $ The declaration in the below line is indented by 3 tabs, amounting to */

Index: src/usr.bin/indent/indent.c
diff -u src/usr.bin/indent/indent.c:1.105 src/usr.bin/indent/indent.c:1.106
--- src/usr.bin/indent/indent.c:1.105	Tue Oct  5 16:33:25 2021
+++ src/usr.bin/indent/indent.c	Tue Oct  5 17:12:20 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: indent.c,v 1.105 2021/10/05 16:33:25 rillig Exp $	*/
+/*	$NetBSD: indent.c,v 1.106 2021/10/05 17:12:20 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.105 2021/10/05 16:33:25 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.106 2021/10/05 17:12:20 rillig Exp $");
 #elif defined(__FreeBSD__)
 __FBSDID("$FreeBSD: head/usr.bin/indent/indent.c 340138 2018-11-04 19:24:49Z oshogbo $");
 #endif
@@ -501,19 +501,19 @@ main_prepare_parsing(void)
     parse(semicolon);
 
     char *p = buf_ptr;
-    int col = 1;
+    int ind = 0;
 
     for (;;) {
 	if (*p == ' ')
-	    col++;
+	    ind++;
 	else if (*p == '\t')
-	    col = opt.tabsize * (1 + (col - 1) / opt.tabsize) + 1;
+	    ind = opt.tabsize * (1 + ind / opt.tabsize);
 	else
 	    break;
 	p++;
     }
-    if (col > opt.indent_size)
-	ps.ind_level = ps.ind_level_follow = col / opt.indent_size;
+    if (ind >= opt.indent_size)
+	ps.ind_level = ps.ind_level_follow = (ind + 1) / opt.indent_size;
 }
 
 static void __attribute__((__noreturn__))

Reply via email to