[BusyBox-cvs] busybox/editors sed.c,1.158,1.159

Erik Andersen andersen at busybox.net
Wed Feb 4 10:57:48 UTC 2004


Update of /var/cvs/busybox/editors
In directory nail:/tmp/cvs-serv17230/editors

Modified Files:
	sed.c 
Log Message:
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...)




Index: sed.c
===================================================================
RCS file: /var/cvs/busybox/editors/sed.c,v
retrieving revision 1.158
retrieving revision 1.159
diff -u -d -r1.158 -r1.159
--- sed.c	4 Jan 2004 06:42:14 -0000	1.158
+++ sed.c	4 Feb 2004 10:57:46 -0000	1.159
@@ -618,6 +618,15 @@
 	do {
 		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++;
 
 		/* If we aren't interested in this match, output old line to
@@ -1073,6 +1082,14 @@
 		bb_perror_msg_and_die("atexit");
 #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 */
 	while ((opt = getopt(argc, argv, "ne:f:")) > 0) {
 		switch (opt) {




More information about the busybox-cvs mailing list