Busybox 1.1.0 tr problem
m.pommerenke at avm.de
m.pommerenke at avm.de
Wed Jan 18 11:21:32 UTC 2006
Hi Henry,
> # echo abc123 | busybox tr -d "[0-9]"
> Segmentation fault (core dumped)
we have fixed this already.
1) tr "[0-9]" Segmentation fault (core dumped)
2) tr "\[0" did not work
I know it's a hack but it should work.
The bb_process_escape_sequence function returns '\' if you use is on an
expression like "\[".
It behaves like this on every escape sequence not known.
Martin Pommerenke
AVM Berlin
static unsigned int expand(const char *arg, register unsigned char *buffer)
{
unsigned char *buffer_start = buffer;
int i, ac;
while (*arg) {
if (*arg == '\\') {
char save = *(++arg);
/*--- pp_process_escape_sequence verhaelt sich fehlerhaft, wenn
es nichst zu excapen gibt ---*/
*buffer = bb_process_escape_sequence(&arg);
if((*buffer == '\\') && (save != '\\')) { /* HACK */
*buffer = save;
}
buffer++;
} else if (*(arg+1) == '-') {
ac = *(arg+2);
if(ac == 0) {
*buffer++ = *arg++;
continue;
}
i = *arg;
while (i <= ac)
*buffer++ = i++;
arg += 3; /* Skip the assumed a-z */
} else if (*arg == '[') {
arg++;
if (ENABLE_FEATURE_TR_CLASSES && *arg++ == ':') {
if (strncmp(arg, "alpha", 5) == 0) {
for (i = 'A'; i <= 'Z'; i++)
*buffer++ = i;
for (i = 'a'; i <= 'z'; i++)
*buffer++ = i;
}
else if (strncmp(arg, "alnum", 5) == 0) {
for (i = 'A'; i <= 'Z'; i++)
*buffer++ = i;
for (i = 'a'; i <= 'z'; i++)
*buffer++ = i;
for (i = '0'; i <= '9'; i++)
*buffer++ = i;
}
else if (strncmp(arg, "digit", 5) == 0)
for (i = '0'; i <= '9'; i++)
*buffer++ = i;
else if (strncmp(arg, "lower", 5) == 0)
for (i = 'a'; i <= 'z'; i++)
*buffer++ = i;
else if (strncmp(arg, "upper", 5) == 0)
for (i = 'A'; i <= 'Z'; i++)
*buffer++ = i;
else if (strncmp(arg, "space", 5) == 0)
strcat(buffer, " \f\n\r\t\v");
else if (strncmp(arg, "blank", 5) == 0)
strcat(buffer, " \t");
/* gcc gives a warning if braces aren't used here
*/
else if (strncmp(arg, "punct", 5) == 0) {
for (i = 0; i <= ASCII; i++)
if (isprint(i) && (!isalnum(i)) &&
(!isspace(i)))
*buffer++ = i;
}
else if (strncmp(arg, "cntrl", 5) == 0) {
for (i = 0; i <= ASCII; i++)
if (iscntrl(i))
*buffer++ = i;
}
else {
/*--- strcat(buffer, "[:"); ---*/
strcat(buffer, ":");
arg++;
continue;
}
break;
}
if (ENABLE_FEATURE_TR_EQUIV && *arg++ == '=') {
*buffer++ = *arg;
/* skip the closing =] */
arg += 3;
continue;
}
if (*arg++ != '-') {
/*--- *buffer++ = '['; ---*//* m.pommerenke at avm.de:
war immer in der auswahl vorhanden */
arg -= 1; /* m.pommerenke at avm.de: org 2 ==> dann
aber endlosschleife */
continue;
}
i = *arg++;
ac = *arg++;
while (i <= ac)
*buffer++ = i++;
arg++; /* Skip the assumed ']' */
} else if (*arg == ']') { /* m.pommerenke at avm.de: war immer in
der auswahl vorhanden */
*arg++;
} else
*buffer++ = *arg++;
}
return (buffer - buffer_start);
}
Henry Pan
<pank at pank.org>
Gesendet von: An
busybox-bounces at b busybox at busybox.net
usybox.net Kopie
Thema
18.01.2006 10:33 Busybox 1.1.0 tr problem
# echo abc123 | busybox tr -d "[0-9]"
Segmentation fault (core dumped)
1.01 tr does not have the problem.
_______________________________________________
busybox mailing list
busybox at busybox.net
http://busybox.net/cgi-bin/mailman/listinfo/busybox
More information about the busybox
mailing list