bug in tr ?

Denys Vlasenko vda.linux at googlemail.com
Mon Mar 16 06:23:46 UTC 2009


On Sunday 15 March 2009 19:26, walter harms wrote:
> 
> Denys Vlasenko schrieb:
> > On Sunday 15 March 2009 16:47, walter harms wrote:
> >>> Try attached patch, it fixes all these problems in my testing.
> >> I have tested the patch and it seems to work ok.
> >>  [:xdigit:] seems to work
> >>
> >> While testing i noticed that  tr -dc [z-A] behaver differs from GNU tr
> >>
> >> GNU:
> >> tr -dc [z-A]
> >> tr: range-endpoints of `z-A' are in reverse collating sequence order
> >>
> >>
> >> therefor i suggest a patch like that:
> >>
> >> --- coreutils/tr.c.org  2009-03-15 16:07:41.000000000 +0100
> >> +++ coreutils/tr.c      2009-03-15 16:14:06.000000000 +0100
> >> @@ -62,6 +62,9 @@
> >>                                 continue; /* next iter will copy '-' and stop */
> >>                         }
> >>                         i = *arg;
> >> +                       if (arg[0]>arg[3])
> > 
> > arg is "const char *arg". Bug above if char type is signed.
> > Also, I suspect no one has scripts which depend on
> > that "tr z-A" fails, that would be strange.
> > 
> 
> yep, but the point is that GNU tr fails while bb tr works.
> I still suggest add the check (with casting) to have the same behaver.

This would enlarge the binary, therefore - how is this useful?
"tr z-A" now works, it will start to fail. This will match
GNU tr, yes, but do you REALLY think there are people who deliberately
run GNU tr with command line "tr z-A" and REQUIRE it to fail?
Why anyone would do that?


And lastly:


TR(P)                      POSIX Programmer's Manual                     TR(P)

...
       c-c    In the POSIX locale, this construct shall represent the range of
              collating  elements between the range endpoints (as long as nei-
              ther endpoint is an octal sequence of the form  \octal),  inclu-
              sive,  as  defined  by the collation sequence. The characters or
              collating elements in the range shall be placed in the array  in
              ascending  collation  sequence.  If the second endpoint precedes
                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
              the starting endpoint in the collation sequence, it is  unspeci-
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
              fied  whether  the range of collating elements is empty, or this
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
              construct is treated as invalid. In locales other than the POSIX
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
              locale, this construct has unspecified behavior.


we don't violate POSIX.
--
vda


More information about the busybox mailing list