grep: fix a case when -o loops forever
No binary (build failed)
—
(log yok)
| @@ -229,8 +229,8 @@ static int grep_file(FILE *file) | |
| char *line = NULL; | |
| ssize_t line_len; | |
| size_t line_alloc_len; | |
| - | #define rm_so start[0] |
| - | #define rm_eo end[0] |
| + | # define rm_so start[0] |
| + | # define rm_eo end[0] |
| #endif | |
| #if ENABLE_FEATURE_GREP_CONTEXT | |
| int print_n_lines_after = 0; | |
| @@ -238,7 +238,7 @@ static int grep_file(FILE *file) | |
| int idx = 0; /* used for iteration through the circular buffer */ | |
| #else | |
| enum { print_n_lines_after = 0 }; | |
| - | #endif /* ENABLE_FEATURE_GREP_CONTEXT */ |
| + | #endif |
| while ( | |
| #if !ENABLE_EXTRA_COMPAT | |
| @@ -377,6 +377,8 @@ static int grep_file(FILE *file) | |
| print_line(line + gl->matched_range.rm_so, | |
| end - gl->matched_range.rm_so, | |
| linenum, ':'); | |
| + | if (old == '\0') |
| + | break; |
| line[end] = old; | |
| #if !ENABLE_EXTRA_COMPAT | |
| if (regexec(&gl->compiled_regex, line + end, | |
| @@ -90,4 +90,9 @@ testing "grep -E -o prints all matches" \ | |
| "00:19:3E:00:AA:5E\n00:1D:60:3D:3A:FB\n00:22:43:49:FB:AA\n" \ | |
| "" "00:19:3E:00:AA:5E 00:1D:60:3D:3A:FB 00:22:43:49:FB:AA\n" | |
| + | testing "grep -o does not loop forever" \ |
| + | 'grep -o "[^/]*$"' \ |
| + | "test\n" \ |
| + | "" "/var/test\n" |
| + | |
| exit $FAILCOUNT | |