Rob Landley writes:

While building glibc with busybox as part of the development environment, I
found a bug in glibc's regexec can throw sed into an endless loop.  This
fixes it.  Should I put an #ifdef around it or something?  (Note, this patch
also contains the "this is not gnu sed 4.0" hack I posted earlier, which is
also needed to build glibc...)
This commit is contained in:
Eric Andersen 2004-02-04 10:57:46 +00:00
parent 4575bbf7b8
commit c06f568dda

View File

@ -618,6 +618,15 @@ static int do_subst_command(sed_cmd_t * sed_cmd, char **line)
do { do {
int i; int i;
/* Work around bug in glibc regexec, demonstrated by:
echo " a.b" | busybox sed 's [^ .]* x g'
The match_count check is so not to break
echo "hi" | busybox sed 's/^/!/g' */
if(!regmatch[0].rm_so && !regmatch[0].rm_eo && match_count) {
pipe_putc(*(oldline++));
continue;
}
match_count++; match_count++;
/* If we aren't interested in this match, output old line to /* If we aren't interested in this match, output old line to
@ -1073,6 +1082,14 @@ extern int sed_main(int argc, char **argv)
bb_perror_msg_and_die("atexit"); bb_perror_msg_and_die("atexit");
#endif #endif
#define LIE_TO_AUTOCONF
#ifdef LIE_TO_AUTOCONF
if(argc==2 && !strcmp(argv[1],"--version")) {
printf("This is not GNU sed version 4.0\n");
exit(0);
}
#endif
/* do normal option parsing */ /* do normal option parsing */
while ((opt = getopt(argc, argv, "ne:f:")) > 0) { while ((opt = getopt(argc, argv, "ne:f:")) > 0) {
switch (opt) { switch (opt) {