Applied, thanks!
On Wed, Jul 19, 2017 at 11:43 AM, Ron Yorston <[email protected]> wrote: > Currently od_bloaty does this: > > $ /bin/echo -en '\x00\x00\x00\x00\x00\x00\x00\x00' | busybox od -f > od: invalid character 'F' in type string 'fF' > $ /bin/echo -en '\x00\x00\x00\x00\x00\x00\x00\x00' | busybox od -t fD > od: invalid character 'D' in type string 'fD' > $ /bin/echo -en '\x00\x00\x00\x00\x00\x00\x00\x00' | busybox od -t f > 0000000 > 0000010 > > The first two occur because the alphabetic length specifier isn't being > properly skipped. The third is due to the empty length specifier being > treated as alphabetic so we fall off the end of the FDL_sizeof array with > undetermined consequences. Coreutils defaults to printing a double in > this case. > > With this patch the output is: > > $ /bin/echo -en '\x00\x00\x00\x00\x00\x00\x00\x00' | ./busybox od -f > 0000000 0.0000000e+00 0.0000000e+00 > 0000010 > $ /bin/echo -en '\x00\x00\x00\x00\x00\x00\x00\x00' | ./busybox od -t fD > 0000000 0.000000000000000e+00 > 0000010 > $ /bin/echo -en '\x00\x00\x00\x00\x00\x00\x00\x00' | ./busybox od -t f > 0000000 0.000000000000000e+00 > 0000010 > > I guess nobody uses BusyBox od to print floating point numbers. > > Signed-off-by: Ron Yorston <[email protected]> > --- > coreutils/od_bloaty.c | 3 ++- > testsuite/od.tests | 10 ++++++++++ > 2 files changed, 12 insertions(+), 1 deletion(-) > > diff --git a/coreutils/od_bloaty.c b/coreutils/od_bloaty.c > index f13bdfc11..fa0196ca4 100644 > --- a/coreutils/od_bloaty.c > +++ b/coreutils/od_bloaty.c > @@ -665,7 +665,7 @@ decode_one_format(const char *s_orig, const char *s, > struct tspec *tspec) > fmt = FLOATING_POINT; > ++s; > p = strchr(FDL, *s); > - if (!p) { > + if (!p || *p == '\0') { > size = sizeof(double); > if (isdigit(s[0])) { > size = bb_strtou(s, &end, 0); > @@ -686,6 +686,7 @@ decode_one_format(const char *s_orig, const char *s, > struct tspec *tspec) > }; > > size = FDL_sizeof[p - FDL]; > + s++; /* skip F/D/L */ > } > > size_spec = fp_type_size[size]; > diff --git a/testsuite/od.tests b/testsuite/od.tests > index 7a9da3e97..0880e0d2f 100755 > --- a/testsuite/od.tests > +++ b/testsuite/od.tests > @@ -16,6 +16,16 @@ testing "od -b" \ > "" "HELLO" > SKIP= > > +optional DESKTOP > +testing "od -f" \ > + "od -f" \ > +"\ > +0000000 0.0000000e+00 0.0000000e+00 > +0000010 > +" \ > + "" "\x00\x00\x00\x00\x00\x00\x00\x00" > +SKIP= > + > optional DESKTOP LONG_OPTS > testing "od -b --traditional" \ > "od -b --traditional" \ > -- > 2.13.3 > > _______________________________________________ > busybox mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
