From fd6ea0dfc94bd5160c31ddad843e3e175e6c1f61 Mon Sep 17 00:00:00 2001 From: Nicholas Wilson Date: Sat, 22 Aug 2026 12:24:26 +0100 Subject: [PATCH] pcre2grep: Fix small UBSan int overflow regression --- src/pcre2grep.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/pcre2grep.c b/src/pcre2grep.c index 34d8089c1..613b35086 100644 --- a/src/pcre2grep.c +++ b/src/pcre2grep.c @@ -3151,11 +3151,20 @@ while (ptr < endptr) while (startoffset > linelength + endlinelength) { - ptr += linelength + endlinelength; - filepos += (int)(linelength + endlinelength); + PCRE2_SIZE lineadvance = linelength + endlinelength; + + if (endprevious < lineadvance) + { + FWRITE_IGNORE(ptr + endprevious, 1, + lineadvance - endprevious, stdout); + endprevious = 0; + } + else endprevious -= lineadvance; + + ptr += lineadvance; + filepos += (int)lineadvance; linenumber++; - startoffset -= (int)(linelength + endlinelength); - endprevious -= (int)(linelength + endlinelength); + startoffset -= lineadvance; t = end_of_line(ptr, endptr, &endlinelength); linelength = t - ptr - endlinelength; length = (PCRE2_SIZE)(endptr - ptr);