[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