[Toybox] "bad xform" not very helpful

enh enh at google.com
Tue Aug 16 10:28:25 PDT 2022


On Tue, Aug 16, 2022 at 1:43 AM Rob Landley <rob at landley.net> wrote:

> On 8/15/22 18:50, enh via Toybox wrote:
> > and here's their minimized repro case:
> >
> > echo > /tmp/foo.txt; echo /tmp/foo.txt > /tmp/find.txt
> >
> > cat /tmp/find.txt | prebuilts/build-tools/path/linux-x86/tar czf
> /tmp/out.tar.gz \
> >   --absolute-names \
> >   --transform 's,^/,,' -T -
> >
> > This fails with
> >
> > tar: bad xform
>
> Hmmm...
>
> $ echo > /tmp/foo.txt; echo /tmp/foo.txt > /tmp/find.txt
> $ cat /tmp/find.txt | PATH=$PWD/sub9:$PATH ./tar czf out.tar.gz \
>   --absolute-names --transform 's,^/,,' -T -
> $ tar tvf /tmp/out.tar.gz
> -rw-r--r-- landley/landley   1 2022-08-16 01:53 tmp/foo.txt
>
> Working for me? (The sub9 bit was because I stuck toybox sed in the $PATH
> to
> make sure that wasn't it...)
>

repos for me, both with their prebuilt but also with a fresh clone (on
either macos or linux):

*/tmp/toybox$ *cat /tmp/find.txt | ./toybox tar czf /tmp/out.tar.gz
--absolute-names
  --transform 's,^/,,' -T -

tar: bad xform

*/tmp/toybox$ *

a bit of printf debugging shows we're reading nothing back:

*/tmp/toybox$ *cat /tmp/find.txt | strace -f ./toybox tar czf
/tmp/out.tar.gz   --absolute-names   --transform 's,^/,,' -T - 2> /tmp/out

argv[0]="sed"

argv[1]="-e"

argv[2]="s,^/,,"

pid=1779946

stdin="/tmp/foo.txt"

  len=0 Success

total=0 result="(null)"


but strace implies we're not actually exec()ing sed at all?

let me know if you've already fixed this on your branch and that's why you
can't repro, otherwise i'll keep looking after my meeting...

> However, if the file names are fed via the -T /tmp/find.txt, it works:
>
> Hmmm... the child process shouldn't have access to the parent's stdin, we
> replaced it with a pipe? There was a potential bug in that area, but commit
> dc8b46d5ddab should have fixed it last month and I don't _think_ it would
> have
> applied here anyway...
>
> > echo > /tmp/foo.txt; echo /tmp/foo.txt > /tmp/find.txt
> >
> > prebuilts/build-tools/path/linux-x86/tar czf /tmp/out.tar.gz \
> >   --absolute-names \
> >   --transform 's,^/,,' -T /tmp/find.txt
> >
> > (the "prebuilts/build-tools/path/linux-x86/" stuff is just a directory
> full of
> > symlinks to toybox.)
>
> Multiplexer instead of standalone build shouldn't make a difference if
> you've
> disabled command recursion. (Modulo you're calling tar out a specific path
> but
> it then grabs sed out of the $PATH, but I haven't yet implemented the extra
> argument processing that would specifically require toybox sed...)
>
> (The extra error message is a little tricker than my first guess because
> you can
> have multiple --xform things which turn into a list of -e entries to sed...
> Possibly instead of error_exit() I should error_msg(), dump the sed
> command line
> on a second line, and then xexit()...)
>
> Rob
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.landley.net/pipermail/toybox-landley.net/attachments/20220816/7cc973bb/attachment-0001.htm>


More information about the Toybox mailing list