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__))