commit 13f39a920faa3f6b9700d16a92ae206c8cd328a5c97fae2b7b54ddc9f23d6e4b Author: Adrian Schröter Date: Fri May 23 11:44:12 2025 +0200 Sync from SUSE:SLFO:Main indent revision 60179ce8bb7bcc51f6e315b7cc322469 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/fix-heap-buffer-overwrite-search_brace-CVE-2023-40305.patch b/fix-heap-buffer-overwrite-search_brace-CVE-2023-40305.patch new file mode 100644 index 0000000..1b9ff27 --- /dev/null +++ b/fix-heap-buffer-overwrite-search_brace-CVE-2023-40305.patch @@ -0,0 +1,4249 @@ +From 61b6e7d6496052a1c04f29ade66921217554bfeb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Tue, 15 Aug 2023 19:00:56 +0200 +Subject: [PATCH 2/2] Fix a heap buffer overwrite in search_brace() + (CVE-2023-40305) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If there was a comment between if-condition and an statement opening +bracket and the comment size aligned to an indent-internal 1024 B +buffer for comments, indent attempted to write into a nonallocated +memory on heap. + +$ hexdump -C /tmp/write1 +00000000 69 66 20 30 3b 65 6c 73 65 2f 2a 0a 0a 0a 0a 0a |if 0;else/*.....| +00000010 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a |................| +* +00000800 0a 0a 0a 0a 2a 2f 7b 0a |....*/{.| +00000808 + +$ valgrind -- ./indent -o /dev/null /tmp/write1 2>&1 | head -n 23 +==26345== Memcheck, a memory error detector +==26345== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al. +==26345== Using Valgrind-3.21.0 and LibVEX; rerun with -h for copyright info +==26345== Command: ./indent -o /dev/null /tmp/write1 +==26345== +==26345== Invalid write of size 1 +==26345== at 0x401558: search_brace (indent.c:232) +==26345== by 0x401CB2: indent_main_loop (indent.c:548) +==26345== by 0x402288: indent (indent.c:758) +==26345== by 0x402931: indent_single_file (indent.c:1003) +==26345== by 0x4029FF: indent_all (indent.c:1041) +==26345== by 0x402BA6: main (indent.c:1122) +==26345== Address 0x4aa7830 is 0 bytes after a block of size 2,048 alloc'd +==26345== at 0x4847A40: realloc (vg_replace_malloc.c:1649) +==26345== by 0x408BA1: xrealloc (globs.c:64) +==26345== by 0x40BEE4: need_chars (handletoken.c:89) +==26345== by 0x401686: search_brace (indent.c:281) +==26345== by 0x401CB2: indent_main_loop (indent.c:548) +==26345== by 0x402288: indent (indent.c:758) +==26345== by 0x402931: indent_single_file (indent.c:1003) +==26345== by 0x4029FF: indent_all (indent.c:1041) +==26345== by 0x402BA6: main (indent.c:1122) + +The cause was that the buffer was exhausted by the comment text and no +space left for the following new-line and curly bracket characters. + +This patch fixes it by enlarging the buffer two fit these two +additional characters. + + + +Signed-off-by: Petr Písař +--- + regression/TEST | 44 +- + regression/input/comment-heap-overwrite.c | 2042 ++++++++++++++++ + regression/standard/comment-heap-overwrite.c | 2044 +++++++++++++++++ + .../standard/comment-heap-overwrite.err | 1 + + src/indent.c | 1 + + 5 files changed, 4111 insertions(+), 21 deletions(-) + create mode 100644 regression/input/comment-heap-overwrite.c + create mode 100644 regression/standard/comment-heap-overwrite.c + create mode 100644 regression/standard/comment-heap-overwrite.err + +Index: b/regression/TEST +=================================================================== +--- a/regression/TEST ++++ b/regression/TEST +@@ -429,6 +429,7 @@ echo Testing new comment stuff...Done. + + + echo Testing bad code handling.... ++ERR=output/errors + + # print_comment() was reading past the end of the buffer... + echo -ne '/*' | $INDENT -npro -st > /dev/null 2>&1 +@@ -446,31 +447,33 @@ then + echo >> $ERR + fi + +-# This ends in a error from indent but it shouldn't coredump. +-$INDENT -npro input/bug206785.c -o output/bug206785.c 2>output/bug206785.err +- +-if [ $? -ne 2 ] +-then +- printf ERROR: bad return status from indent. | tee -a $ERR +- echo >> $ERR +-fi +-cd output +- +-for i in bug206785.c bug206785.err +-do +- printf ...$i... +- diff --initial-tab ../standard/$i $i > $i-diffs 2>&1 +- if [ -s $i-diffs ] +- then +- printf ERROR: $i failed | tee -a $ERR +- echo >> $ERR +- else +- rm $i-diffs +- rm $i +- fi +- echo ++# This ends in an error from indent but it shouldn't coredump. ++for TEST in bug206785 comment-heap-overwrite; do ++ $INDENT -npro input/"$TEST".c -o output/"$TEST".c 2>output/"$TEST".err ++ ++ if [ $? -ne 2 ] ++ then ++ printf "ERROR: bad return status from indent for %s.c" "$TEST" | tee -a $ERR ++ echo >> $ERR ++ fi ++ ++ for i in "$TEST".c "$TEST".err ++ do ++ printf "...%s..." "$i" ++ diff --initial-tab standard/"$i" output/"$i" > output/"$i"-diffs 2>&1 ++ if [ -s output/"$i"-diffs ] ++ then ++ printf "ERROR: %s failed" "$i" | tee -a $ERR ++ echo >> $ERR ++ else ++ rm output/"$i"-diffs ++ rm output/"$i" ++ fi ++ echo ++ done + done +- ++cd output ++ERR=errors + echo Testing bad code handling...Done. + + # Now see if any errors occured. If so, bitch and moan, otherwise, +Index: b/regression/input/comment-heap-overwrite.c +=================================================================== +--- /dev/null ++++ b/regression/input/comment-heap-overwrite.c +@@ -0,0 +1,2042 @@ ++if 0;else/* ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++*/{ +Index: b/regression/standard/comment-heap-overwrite.c +=================================================================== +--- /dev/null ++++ b/regression/standard/comment-heap-overwrite.c +@@ -0,0 +1,2044 @@ ++if 0; ++else /* ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ */ ++ { +Index: b/regression/standard/comment-heap-overwrite.err +=================================================================== +--- /dev/null ++++ b/regression/standard/comment-heap-overwrite.err +@@ -0,0 +1 @@ ++indent: input/comment-heap-overwrite.c:2044: Error:Unexpected end of file +Index: b/src/indent.c +=================================================================== +--- a/src/indent.c ++++ b/src/indent.c +@@ -228,6 +228,7 @@ static BOOLEAN search_brace( + * a `dump_line' call, thus ensuring that the brace + * will go into the right column. */ + ++ need_chars (&save_com, 2); + *save_com.end++ = EOL; + *save_com.end++ = '{'; + save_com.len += 2; diff --git a/fix-out-of-buffer-read-CVE-2023-40305.patch b/fix-out-of-buffer-read-CVE-2023-40305.patch new file mode 100644 index 0000000..ef31407 --- /dev/null +++ b/fix-out-of-buffer-read-CVE-2023-40305.patch @@ -0,0 +1,4191 @@ +From d091dae6b9080859cd47b85fc0a73e572d40d9be Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Tue, 15 Aug 2023 14:09:06 +0200 +Subject: [PATCH 1/2] Fix an out-of-buffer read in search_brace()/lexi() on an + condition without parentheses followed with an overlong comment +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Reproducer: + +$ hexdump -C /tmp/short +00000000 69 66 20 30 3b 65 6c 73 65 2f 2a 0a 0a 0a 0a 0a |if 0;else/*.....| +00000010 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a |................| +* +00000800 0a 0a 2a 2f 78 0a |..*/x.| +00000806 + +$ valgrind -- ./indent -o /dev/null /tmp/short +[...] +==21830== Invalid read of size 1 +==21830== at 0x40586A: lexi (lexi.c:251) +==21830== by 0x40198C: search_brace (indent.c:387) +==21830== by 0x401CC2: indent_main_loop (indent.c:548) +==21830== by 0x402298: indent (indent.c:758) +==21830== by 0x402941: indent_single_file (indent.c:1003) +==21830== by 0x402A0F: indent_all (indent.c:1041) +==21830== by 0x402BC5: main (indent.c:1122) +==21830== Address 0x4ab2210 is 0 bytes inside a block of size 2,048 free'd +==21830== at 0x4847A40: realloc (vg_replace_malloc.c:1649) +==21830== by 0x408BC0: xrealloc (globs.c:64) +==21830== by 0x40BF03: need_chars (handletoken.c:89) +==21830== by 0x401433: sw_buffer (indent.c:149) +==21830== by 0x401973: search_brace (indent.c:380) +==21830== by 0x401CC2: indent_main_loop (indent.c:548) +==21830== by 0x402298: indent (indent.c:758) +==21830== by 0x402941: indent_single_file (indent.c:1003) +==21830== by 0x402A0F: indent_all (indent.c:1041) +==21830== by 0x402BC5: main (indent.c:1122) +==21830== Block was alloc'd at +==21830== at 0x4847A40: realloc (vg_replace_malloc.c:1649) +==21830== by 0x408BC0: xrealloc (globs.c:64) +==21830== by 0x40BF03: need_chars (handletoken.c:89) +==21830== by 0x401696: search_brace (indent.c:281) +==21830== by 0x401CC2: indent_main_loop (indent.c:548) +==21830== by 0x402298: indent (indent.c:758) +==21830== by 0x402941: indent_single_file (indent.c:1003) +==21830== by 0x402A0F: indent_all (indent.c:1041) +==21830== by 0x402BC5: main (indent.c:1122) + +The cause was that need_chars(&save_com, ...) could reallocate save_com.ptr +pointer keeping a dangling copy of that pointer saved to buf_ptr +a line above. + +Related to CVE-2023-40305 + +Signed-off-by: Petr Písař +--- + regression/TEST | 3 +- + regression/input/comment-heap-overread.c | 2040 ++++++++++++++++++ + regression/standard/comment-heap-overread.c | 2042 +++++++++++++++++++ + src/indent.c | 2 +- + 4 files changed, 4085 insertions(+), 2 deletions(-) + create mode 100644 regression/input/comment-heap-overread.c + create mode 100644 regression/standard/comment-heap-overread.c + +diff --git a/regression/TEST b/regression/TEST +index 37d0664..0933e9b 100755 +--- a/regression/TEST ++++ b/regression/TEST +@@ -39,7 +39,8 @@ BUGS="case-label.c one-line-1.c one-line-2.c one-line-3.c \ + one-line-4.c struct-decl.c sizeof-in-while.c line-break-comment.c \ + macro.c enum.c elif.c nested.c wrapped-string.c minus_predecrement.c \ + bug-gnu-33364.c float-constant-suffix.c block-comments.c \ +- no-forced-nl-in-block-init.c hexadecimal_float.c binary-constant.c" ++ no-forced-nl-in-block-init.c hexadecimal_float.c binary-constant.c \ ++ comment-heap-overread.c" + + INDENTSRC="args.c backup.h backup.c dirent_def.h globs.c indent.h \ + indent.c indent_globs.h io.c lexi.c memcpy.c parse.c pr_comment.c \ +diff --git a/regression/input/comment-heap-overread.c b/regression/input/comment-heap-overread.c +new file mode 100644 +index 0000000..5b0b172 +--- /dev/null ++++ b/regression/input/comment-heap-overread.c +@@ -0,0 +1,2040 @@ ++if 0;else/* ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++*/x +diff --git a/regression/standard/comment-heap-overread.c b/regression/standard/comment-heap-overread.c +new file mode 100644 +index 0000000..e601fb4 +--- /dev/null ++++ b/regression/standard/comment-heap-overread.c +@@ -0,0 +1,2042 @@ ++if 0; ++else /* ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ */ ++ x +diff --git a/src/indent.c b/src/indent.c +index fc69974..3f9ffc9 100644 +--- a/src/indent.c ++++ b/src/indent.c +@@ -145,8 +145,8 @@ static void sw_buffer(void) + parser_state_tos->search_brace = false; + bp_save = buf_ptr; + be_save = buf_end; +- buf_ptr = save_com.ptr; + need_chars (&save_com, 1); ++ buf_ptr = save_com.ptr; + buf_end = save_com.end; + save_com.end = save_com.ptr; /* make save_com empty */ + } +-- +2.41.0 + diff --git a/indent-2.2.13.tar.xz b/indent-2.2.13.tar.xz new file mode 100644 index 0000000..3d28363 --- /dev/null +++ b/indent-2.2.13.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b81ba4e9a006ca8e6eb5cbbe4cf4f75dfc1fc9301b459aa0d40393e85590a0b +size 475360 diff --git a/indent-2.2.13.tar.xz.sig b/indent-2.2.13.tar.xz.sig new file mode 100644 index 0000000..7b8bdcb Binary files /dev/null and b/indent-2.2.13.tar.xz.sig differ diff --git a/indent-CVE-2024-0911.patch b/indent-CVE-2024-0911.patch new file mode 100644 index 0000000..f1e821d --- /dev/null +++ b/indent-CVE-2024-0911.patch @@ -0,0 +1,16 @@ +diff --git a/src/output.c b/src/output.c +index ee01bcc..17eee6e 100644 +--- a/src/output.c ++++ b/src/output.c +@@ -290,7 +290,7 @@ void set_buf_break ( + /* Did we just parse a bracket that will be put on the next line + * by this line break? */ + +- if ((*token == '(') || (*token == '[')) ++ if (level > 0 && ((*token == '(') || (*token == '['))) + { + --level; /* then don't take it into account */ + } +-- +2.43.0 + diff --git a/indent.changes b/indent.changes new file mode 100644 index 0000000..f14f2c7 --- /dev/null +++ b/indent.changes @@ -0,0 +1,221 @@ +------------------------------------------------------------------- +Fri Feb 16 09:57:02 UTC 2024 - pgajdos@suse.com + +- security update +- added patches + fix CVE-2024-0911 [bsc#1219210], heap-based buffer overflow in set_buf_break() + + indent-CVE-2024-0911.patch + +------------------------------------------------------------------- +Mon Aug 21 15:53:01 UTC 2023 - Antonio Teixeira + +- Fix memory safety issues, bsc#1214243, CVE-2023-40305: + * fix-out-of-buffer-read-CVE-2023-40305.patch + * fix-heap-buffer-overwrite-search_brace-CVE-2023-40305.patch + +------------------------------------------------------------------- +Fri Mar 24 20:45:47 UTC 2023 - Andreas Stieger + +- Update to 2.2.13: + * Fix buffer overflows and use after free bugs (boo#1209718) + * Recognize binary integer literals + * Updated translations, new translation: Portuguese + +------------------------------------------------------------------- +Thu Feb 20 11:15:24 UTC 2020 - Martin Pluskal + +- Use xz sources +- Split lang package +- Fetch keyring from savannah + +------------------------------------------------------------------- +Mon Dec 17 09:04:23 UTC 2018 - astieger@suse.com + +- indent 2.2.12: + * New options: + + -pal / --pointer-align-left and -par / --pointer-align-right + + -fnc / --fix-nested-comment + + -gts / --gettext-strings + + -slc / --single-line-conditionals + + -as / --align-with-spaces + + -ut / --use-tabs + + -nut / --no-tabs + + -sar / --spaces-around-initializers + + -ntac / --dont-tab-align-comments + + -linux preset now includes -nbs. + + -kr preset now includes -par. + * Indent now recognises C99 and C11 keywords, and also typeof. +- drop patches: + * indent-2.2.10-lcall.diff + * indent-2.2.10-man.diff + * indent-2.2.10-warnings.diff + * indent-texi2html-5.0.patch +- add upstream signing key and verify signature + +------------------------------------------------------------------- +Fri Dec 15 12:19:22 UTC 2017 - kstreitova@suse.com + +- update to 2.2.11 + * fixed Debian Bug report logs - #485764, Regression with + --blank-lines-after-declarations in 2.2.10 + * fail instead of removing embedded NULLs in input files + * fixed handling of '...' range 'operator in C++ language + * fixed -nlps option. +- remove indent-2.2.10-nothing_is_void.diff that is no longer + needed +- remove indent-2.2.10-cdw.diff that is useless now +- refresh indent-2.2.10-warnings.diff +- re-enable parallel build +- ship COPYING NEWS README and ChangeLog files + +------------------------------------------------------------------- +Thu Mar 23 15:15:13 UTC 2017 - kstreitova@suse.com + +- cleanup with spec-cleaner +- get rid of %{name} and %{version} macros in the patch names + +------------------------------------------------------------------- +Thu Feb 19 09:28:11 UTC 2015 - dimstar@opensuse.org + +- Replace texinfo BuildRequires with makeinfo and texi2html: only + those parts are needed. +- Add indent-texi2html-5.0.patch: Fix build with texi2html 5.0 + (note: patches Makeinfo.in in order to not depend on libtool) +- Move install_info_delete from postun to preun. + +------------------------------------------------------------------- +Wed Feb 18 20:44:18 UTC 2015 - mpluskal@suse.com + +- Use url for source +- Add gpg signature +- Cleanup spec file with spec cleaner +- Remove useless configure option --with-pic + +------------------------------------------------------------------- +Fri Jul 20 05:00:55 UTC 2012 - coolo@suse.com + +- texi2html is required + +------------------------------------------------------------------- +Tue Aug 5 12:09:45 CEST 2008 - prusnak@suse.cz + +- updated to 2.2.10 + * added --indent-label and --linux-style options to control + indentation of goto labels and supply a canned set of settings + that closely matches the preferred style for the linux kernel + * GPLv3 is used now +- removed obsoleted patches: + * overflow.patch (included in update) + +------------------------------------------------------------------- +Sun Feb 24 18:10:35 CET 2008 - crrodriguez@suse.de + +- use find_lang macro + +------------------------------------------------------------------- +Wed Jan 25 21:36:37 CET 2006 - mls@suse.de + +- converted neededforbuild to BuildRequires + +------------------------------------------------------------------- +Mon Dec 13 23:27:07 CET 2004 - sndirsch@suse.de + +- moved chinese mo file to correct directory (Bug #47262) + +------------------------------------------------------------------- +Wed Sep 15 21:00:32 CEST 2004 - aj@suse.de + +- Fix compiler warnings. + +------------------------------------------------------------------- +Wed Jun 30 10:35:12 CEST 2004 - tcrhak@suse.cz + +- removed texinfo2man from the file list (bug #42247) + +------------------------------------------------------------------- +Fri Apr 16 11:19:25 CEST 2004 - mmj@suse.de + +- Functions that are void should be declared as such + +------------------------------------------------------------------- +Thu Mar 04 20:11:08 CET 2004 - tcrhak@suse.cz + +- security fix for overflow (bug #33790) + +------------------------------------------------------------------- +Sat Jan 10 18:27:13 CET 2004 - adrian@suse.de + +- build as user + +------------------------------------------------------------------- +Wed May 14 11:53:22 CEST 2003 - mmj@suse.de + +- Remove unwanted files + +------------------------------------------------------------------- +Thu Apr 24 12:20:23 CEST 2003 - ro@suse.de + +- fix install_info --delete call and move from preun to postun + +------------------------------------------------------------------- +Thu Feb 13 02:18:21 CET 2003 - mmj@suse.de + +- Add %install_info macro [#23428] + +------------------------------------------------------------------- +Mon Jan 06 19:15:06 CET 2003 - tcrhak@suse.cz + +- update to version 2.2.9 + +------------------------------------------------------------------- +Sat Jul 13 15:14:44 CEST 2002 - tcrhak@suse.cz + +- update to version 2.2.8a + +------------------------------------------------------------------- +Thu Oct 4 11:51:40 CEST 2001 - schwab@suse.de + +- Don't run automake/autoconf. + +------------------------------------------------------------------- +Sun Dec 3 15:24:19 CET 2000 - smid@suse.cz + +- New version 2.2.6 + +------------------------------------------------------------------- +Thu Feb 10 18:18:15 CET 2000 - kukuk@suse.de + +- Update to 2.2.5 +- Move /usr/{info,man} -> /usr/share/{info,man} + +------------------------------------------------------------------- +Sun Oct 10 09:39:49 MEST 1999 - kukuk@suse.de + +- Update to version 2.2.3 +- Use BuildRoot + +------------------------------------------------------------------- +Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de + +- ran old prepare_spec on spec file to switch to new prepare_spec. + +------------------------------------------------------------------- +Tue Sep 7 11:11:28 MEST 1999 - kukuk@suse.de + +- Add make to build section + +------------------------------------------------------------------- +Thu Aug 26 12:50:18 MEST 1999 - kukuk@suse.de + +- Update to version 2.2.0 + +------------------------------------------------------------------- +Tue Feb 23 00:28:30 MET 1999 - ro@suse.de + +- dont redefine memcpy for glibc-2.1 + +------------------------------------------------------------------- +Thu Jan 21 01:04:39 MET 1999 - ro@suse.de + +- no m486 on alpha +- include in indent.c diff --git a/indent.keyring b/indent.keyring new file mode 100644 index 0000000..72f083b --- /dev/null +++ b/indent.keyring @@ -0,0 +1,769 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +4mSdeeQSUZH4eT3PUzbsJnTl0ymaUdp6vWHRAA== +=AMmW +-----END PGP PUBLIC KEY BLOCK----- diff --git a/indent.spec b/indent.spec new file mode 100644 index 0000000..ad47b4c --- /dev/null +++ b/indent.spec @@ -0,0 +1,74 @@ +# +# spec file for package indent +# +# Copyright (c) 2024 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +Name: indent +Version: 2.2.13 +Release: 0 +Summary: Indentation of Source Code in various styles +License: GPL-3.0-or-later +Group: Development/Languages/C and C++ +URL: https://www.gnu.org/software/indent +Source0: ftp://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz +Source1: ftp://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz.sig +Source2: https://savannah.gnu.org/people/viewgpg.php?user_id=94096#/%{name}.keyring +# PATCH-FIX-SECURITY fix-out-of-buffer-read-CVE-2023-40305.patch fix-heap-buffer-overwrite-search_brace-CVE-2023-40305 bsc#1214243 CVE-2023-40305 antonio.teixeira@suse.com -- indent: heap-based buffer overflow in search_brace() in indent.c via a crafted file +Patch0: fix-out-of-buffer-read-CVE-2023-40305.patch +Patch1: fix-heap-buffer-overwrite-search_brace-CVE-2023-40305.patch +# CVE-2024-0911 [bsc#1219210], heap-based buffer overflow in set_buf_break() +Patch2: indent-CVE-2024-0911.patch +BuildRequires: makeinfo +BuildRequires: texi2html + +%description +Indent can be used to make code easier to read. It can also convert +from one style of writing C code to another. indent understands a +substantial amount of C syntax, but it also tries to cope with +incomplete and malformed syntax. + +%lang_package + +%prep +%autosetup -p1 + +%build +%configure \ + --docdir=%{_docdir}/%{name} \ + %{nil} +%make_build + +%install +%make_install +rm -f %{buildroot}%{_bindir}/texinfo2man +rm -f %{buildroot}/%{_infodir}/dir +%find_lang %{name} + +%check +%make_build check + +%files +%{_bindir}/* +%license COPYING +%doc NEWS ChangeLog +%{_docdir}/%{name} +%{_infodir}/%{name}.info%{?ext_info} +%{_mandir}/man1/indent.1%{?ext_man} + +%files lang -f %{name}.lang +%license COPYING + +%changelog