On Sun, Jul 17, 2011, Alexander Schrijver wrote:
>> nope, only ssize_t is guaranteed.
> 
> This is the only way i could think off.

I don't think you will ever be able to get a string longer than
SSIZE_MAX into memory, but that looks good. 

> 
> Index: util.c
> ===================================================================
> RCS file: /home/alex/scm/cvsync/src/usr.bin/grep/util.c,v
> retrieving revision 1.41
> diff -u -r1.41 util.c
> --- util.c    11 Jul 2011 20:43:21 -0000      1.41
> +++ util.c    17 Jul 2011 12:01:56 -0000
> @@ -169,7 +169,13 @@
> {
> regmatch_t    pmatch;
> int           c, i, r;
> -     int             offset;
> +     regoff_t        offset;
> +
> +     /* size_t will be converted to regoff_t. ssize_t is guaranteed to fit
> +      * into regoff_t */
> +     if (l->len > SSIZE_MAX) {
> +             errx(2, "Line is too big to process");
> +     }
> 
> c = 0;
> i = 0;
> @@ -444,7 +450,7 @@
> #ifdef SMALL
> return 0;
> #else
> -     int j;
> +     regoff_t j;
> int rtrnVal = REG_NOMATCH;
> 
> pmatch->rm_so = -1;

Reply via email to