[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#373704: Another patch update



Package: busybox
Version: 1:1.1.3-3
Followup-For: Bug #373704

Hi,

Frans Pop noticed a mistake in the latest patch. The last fix (-2)
changed the way 'end' turns up at the end of the loop for no separator
but still removed one from it. Sort did then crop the end of key by
one without separator.

Patch 3 attached.

MfG
	Goswin

-- System Information:
Debian Release: 4.0
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-frosties
Locale: LANG=C, LC_CTYPE=de_DE (charmap=ISO-8859-1)

Versions of packages busybox depends on:
ii  libc6                        2.3.6.ds1-9 GNU C Library: Shared libraries

busybox recommends no packages.

-- no debconf information
diff -u busybox-1.1.3/coreutils/sort.c busybox-1.1.3/coreutils/sort.c
--- busybox-1.1.3/coreutils/sort.c
+++ busybox-1.1.3/coreutils/sort.c
@@ -62,7 +62,7 @@
 
 	/* Special case whole string, so we don't have to make a copy */
 	if(key->range[0]==1 && !key->range[1] && !key->range[2] && !key->range[3]
-		&& !(flags&(FLAG_b&FLAG_d&FLAG_f&FLAG_i&FLAG_bb))) return str;
+		&& !(flags&(FLAG_b|FLAG_d|FLAG_f|FLAG_i|FLAG_bb))) return str;
 	/* Find start of key on first pass, end on second pass*/
 	len=strlen(str);
 
@@ -72,23 +72,24 @@
 		else {
 			end=0;
 			for(i=1;i<key->range[2*j]+j;i++) {
-				/* Skip leading blanks or first separator */
-				if(str[end]) {
-					if(!key_separator && isspace(str[end]))
-						while(isspace(str[end])) end++;
-				}
-				/* Skip body of key */
-				for(;str[end];end++) {
+				/* Skip leading blanks */
+				if(str[end] && !key_separator)
+				    while(isspace(str[end])) end++;
+				/* Skip body of key and one blank or seperator */
+				while(str[end]) {
 					if(key_separator) {
-						if(str[end]==key_separator) break;
-					} else if(isspace(str[end])) break;
+						if(str[end++]==key_separator) break;
+					} else {
+						if(isspace(str[end])) break;
+						end++;
+					}
 				}
 			}
 		}
 		if(!j) start=end;
 	}
-	/* Key with explicit separator starts after separator */
-	if(key_separator && str[start]==key_separator) start++;
+	/* Don't include the last separator */
+	if (key_separator && str[end]) end--;
 	/* Strip leading whitespace if necessary */
 	if(flags&FLAG_b) while(isspace(str[start])) start++;
 	/* Strip trailing whitespace if necessary */

Reply to: