Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/indent indent: prevent buffer overflow in search_stm...



details:   https://anonhg.NetBSD.org/src/rev/58b74ae1ffdc
branches:  trunk
changeset: 1024664:58b74ae1ffdc
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sat Oct 30 17:55:44 2021 +0000

description:
indent: prevent buffer overflow in search_stmt_comment

printf '{ if (%010000d) /*comment*/ ; }' '0' | indent

diffstat:

 usr.bin/indent/indent.c |  10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diffs (31 lines):

diff -r 20d510abec1f -r 58b74ae1ffdc usr.bin/indent/indent.c
--- a/usr.bin/indent/indent.c   Sat Oct 30 17:18:25 2021 +0000
+++ b/usr.bin/indent/indent.c   Sat Oct 30 17:55:44 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: indent.c,v 1.190 2021/10/30 17:18:25 rillig Exp $      */
+/*     $NetBSD: indent.c,v 1.191 2021/10/30 17:55:44 rillig Exp $      */
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -43,7 +43,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__NetBSD__)
-__RCSID("$NetBSD: indent.c,v 1.190 2021/10/30 17:18:25 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.191 2021/10/30 17:55:44 rillig Exp $");
 #elif defined(__FreeBSD__)
 __FBSDID("$FreeBSD: head/usr.bin/indent/indent.c 340138 2018-11-04 19:24:49Z oshogbo $");
 #endif
@@ -237,8 +237,10 @@
         * (size_t)-1 bytes.
         */
        assert((size_t)(inp.s - inp.buf) >= 4);
-       memcpy(sc_buf, inp.buf, (size_t)(inp.s - inp.buf) - 4);
-       save_com = sc_buf + (inp.s - inp.buf - 4);
+       size_t line_len = (size_t)(inp.s - inp.buf) - 4;
+       assert(line_len < array_length(sc_buf));
+       memcpy(sc_buf, inp.buf, line_len);
+       save_com = sc_buf + line_len;
        save_com[0] = save_com[1] = ' ';
        sc_end = &save_com[2];
        debug_vis_range("search_stmt_comment: before save_com is \"",



Home | Main Index | Thread Index | Old Index