diff -pruN sed-4.8_orig/sed/regexp.c sed-4.8_mod/sed/regexp.c --- sed-4.8_orig/sed/regexp.c 2020-01-02 04:38:19.000000000 +0900 +++ sed-4.8_mod/sed/regexp.c 2021-11-13 13:30:06.288317776 +0900 @@ -30,6 +30,12 @@ # define N_(String) (String) #endif +#ifdef _REGEX_LARGE_OFFSETS +# define REGOFF_MAX SSIZE_MAX +#else +# define REGOFF_MAX INT_MAX +#endif + extern bool use_extended_syntax_p; static const char errors[] = @@ -176,7 +182,7 @@ match_regex (struct regex *regex, char * size_t buf_start_offset, struct re_registers *regarray, int regsize) { - int ret; + regoff_t ret; static struct regex *regex_last; /* printf ("Matching from %d/%d\n", buf_start_offset, buflen); */ @@ -191,9 +197,10 @@ match_regex (struct regex *regex, char * else regex_last = regex; - /* gnulib's re_search uses signed-int as length */ - if (buflen >= INT_MAX) - panic (_("regex input buffer length larger than INT_MAX")); + /* gnulib's re_search uses regoff_t as length */ + if (buflen > REGOFF_MAX) + panic (_("regex input buffer length larger than limit(%zd)"), + (ssize_t)REGOFF_MAX); if (regex->pattern.no_sub && regsize) { @@ -359,6 +366,9 @@ match_regex (struct regex *regex, char * buflen - buf_start_offset, regsize ? regarray : NULL); + if (ret < -1) + panic ("internal error in gnulib's re_search. ret = %zd", (ssize_t)ret); + return (ret > -1); }