The following reply was made to PR bin/175213; it has been noted by GNATS.

From: Mark Johnston <ma...@freebsd.org>
To: bug-follo...@freebsd.org, deeptec...@gmail.com
Cc:  
Subject: Re: bin/175213: bsdgrep(1) segfaults upon malicious input
Date: Sun, 27 Jan 2013 09:41:33 -0500

 --ReaqsoxgOBHFXBhH
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 The attached patch should fix the problem. The bounds-checking code in
 IS_OUT_OF_BOUNDS is not quite right; based on the code in SHIFT, (j - 1)
 or (j + fg->len) must be valid indices into str_byte (depending on
 whether a reversed search is being done).
 
 I have a little program which reproduces this problem on my machine;
 it's posted here: http://people.freebsd.org/~markj/prs/175213/
 
 Thanks,
 -Mark
 
 --ReaqsoxgOBHFXBhH
 Content-Type: text/x-diff; charset=us-ascii
 Content-Disposition: attachment; filename="bsdgrep_bounds.diff"
 
 diff --git a/usr.bin/grep/regex/tre-fastmatch.c 
b/usr.bin/grep/regex/tre-fastmatch.c
 index b7a7c91..e363a28 100644
 --- a/usr.bin/grep/regex/tre-fastmatch.c
 +++ b/usr.bin/grep/regex/tre-fastmatch.c
 @@ -101,9 +101,9 @@ static int fastcmp(const fastmatch_t *fg, const void *data,
  
  #define IS_OUT_OF_BOUNDS                                              \
    ((!fg->reversed                                                     \
 -    ? ((type == STR_WIDE) ? ((j + fg->wlen) > len)                    \
 -                        : ((j + fg->len) > len))                      \
 -    : (j < 0)))
 +    ? ((type == STR_WIDE) ? ((j + fg->wlen) >= len)                   \
 +                        : ((j + fg->len) >= len))                     \
 +    : (j <= 0)))
  
  /*
   * Checks whether the new position after shifting in the input string
 
 --ReaqsoxgOBHFXBhH--
_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to