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:
parent
4575bbf7b8
commit
c06f568dda
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user