Felipe Kellermann writes,
authorGlenn L McGrath <bug1@ihug.co.nz>
Fri, 23 Jul 2004 01:42:28 +0000 (01:42 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Fri, 23 Jul 2004 01:42:28 +0000 (01:42 -0000)
"As noticed today by Steven Scholz, the od's `-v' was broken.
I've fixed that and now both the flags `-v' and `-a' are OK"

Fixes a segfault in
echo "uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\02bar\4"| ./busybox od -av

coreutils/od.c

index b18c53c3f8736c8828af4db7b87ac23cd62c7199..6a138e838dbf66bf3a7c9a64840cc93515addce0 100644 (file)
@@ -155,13 +155,13 @@ static const char * const add_strings[] = {
        "4/4 \"    %011o \" \"\\n\"",                   /* O */
 };
 
-static const signed char od_opts[] = "aBbcDdeFfHhIiLlOovXx";
+static const signed char od_opts[] = "aBbcDdeFfHhIiLlOoXxv";
 
 static const signed char od_o2si[] = {
        0, 1, 2, 3, 5,
        4, 6, 6, 7, 8,
        9, 0xa, 0xb, 0xa, 0xa,
-       0xb, 1, -1, 8, 9,
+       0xb, 1, 8, 9,
 };
 
 int od_main(int argc, char **argv)
@@ -173,7 +173,9 @@ int od_main(int argc, char **argv)
        bb_dump_length = -1;
 
        while ((ch = getopt(argc, argv, od_opts)) > 0) {
-               if (((p = strchr(od_opts, ch)) != NULL) && (*p >= 0)) {
+               if (ch == 'v') {
+                       bb_dump_vflag = ALL;
+               } else if (((p = strchr(od_opts, ch)) != NULL) && (*p >= 0)) {
                        if (first) {
                                first = 0;
                                bb_dump_add("\"%07.7_Ao\n\"");
@@ -182,8 +184,6 @@ int od_main(int argc, char **argv)
                                bb_dump_add("\"         \"");
                        }
                        bb_dump_add(add_strings[od_o2si[(int)(p-od_opts)]]);
-               } else if (ch == 'v') {
-                       bb_dump_vflag = ALL;
                } else {        /* P, p, s, w, or other unhandled */
                        bb_show_usage();
                }