From 916bce3a7c3f0d40350786e7ca5d8e55f0bc4f03 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 9 Sep 2005 21:11:36 +0000 Subject: (tac_seekable): Store match length in regoff_t, not int. Assume that negative return values less than -2 represent regoff_t overflow. --- src/tac.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/tac.c b/src/tac.c index 1786b76fd..c5fbe24e6 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) { -- cgit v1.2.3-54-g00ecf