From: Paul Eggert Date: Fri, 9 Sep 2005 21:11:36 +0000 (+0000) Subject: (tac_seekable): Store match length in regoff_t, not int. Assume that X-Git-Tag: CPPI-1_12~26 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=916bce3a7c3f0d40350786e7ca5d8e55f0bc4f03;p=thirdparty%2Fcoreutils.git (tac_seekable): Store match length in regoff_t, not int. Assume that negative return values less than -2 represent regoff_t overflow. --- diff --git a/src/tac.c b/src/tac.c index 1786b76fd5..c5fbe24e6a 100644 --- a/src/tac.c +++ b/src/tac.c @@ -255,14 +255,18 @@ tac_seekable (int input_fd, const char *file) Otherwise, make `match_start' < `G_buffer'. */ if (sentinel_length == 0) { - ptrdiff_t i = match_start - G_buffer; - int ret; + size_t i = match_start - G_buffer; + regoff_t ri = i; + regoff_t range = 1 - ri; + regoff_t ret; - if (! (INT_MIN < i && i <= INT_MAX)) + if (1 < range) error (EXIT_FAILURE, 0, _("record too large")); - ret = re_search (&compiled_separator, G_buffer, i, i - 1, -i, ®s); - if (ret == -1) + if (range == 1 + || ((ret = re_search (&compiled_separator, G_buffer, + i, i - 1, range, ®s)) + == -1)) match_start = G_buffer - 1; else if (ret == -2) {