[PATCH] grep: fix infinite loop in -o

Denys Vlasenko vda.linux at googlemail.com
Mon Aug 23 00:39:10 UTC 2010


On Thursday 19 August 2010 15:50, Colin Watson wrote:
> If the supplied pattern matches the empty string at the start of a line,
> then 'grep -o' would loop forever.
> 
> Originally reported as
> https://bugs.launchpad.net/ubuntu/+source/busybox/+bug/619817.
> 
> Signed-off-by: Colin Watson <cjwatson at ubuntu.com>
> ---
>  findutils/grep.c     |   20 +++++++++++++-------
>  testsuite/grep.tests |    4 ++++
>  2 files changed, 17 insertions(+), 7 deletions(-)
> 
> diff --git a/findutils/grep.c b/findutils/grep.c
> index 688ea6a..7545ade 100644
> --- a/findutils/grep.c
> +++ b/findutils/grep.c
> @@ -463,13 +463,19 @@ static int grep_file(FILE *file)
>  					} else while (1) {
>  						unsigned end = gl->matched_range.rm_eo;
>  						char old = line[end];
> -						line[end] = '\0';
> -						print_line(line + gl->matched_range.rm_so,
> -								end - gl->matched_range.rm_so,
> -								linenum, ':');
> -						if (old == '\0')
> -							break;
> -						line[end] = old;
> +						if (gl->matched_range.rm_so == gl->matched_range.rm_eo) {
> +							end++;

Why do you think end++ does not run off the end of the line?

> +							if (line[end] == '\0')
> +								break;

-- 
vda


More information about the busybox mailing list