sandbox: Ensure that long-options array is terminated
authorSimon Glass <sjg@chromium.org>
Mon, 3 Feb 2020 14:36:04 +0000 (07:36 -0700)
committerSimon Glass <sjg@chromium.org>
Thu, 6 Feb 2020 02:33:46 +0000 (19:33 -0700)
The last member of this array is supposed to be all zeroes according to
the getopt_long() man page. Fix the function to do this.

Signed-off-by: Simon Glass <sjg@chromium.org>
arch/sandbox/cpu/os.c

index 60011f7..f7c73e3 100644 (file)
@@ -284,7 +284,7 @@ int os_parse_args(struct sandbox_state *state, int argc, char *argv[])
 
        /* dynamically construct the arguments to the system getopt_long */
        short_opts = malloc(sizeof(*short_opts) * num_options * 2 + 1);
-       long_opts = malloc(sizeof(*long_opts) * num_options);
+       long_opts = malloc(sizeof(*long_opts) * (num_options + 1));
        if (!short_opts || !long_opts)
                return 1;
 
@@ -314,6 +314,7 @@ int os_parse_args(struct sandbox_state *state, int argc, char *argv[])
        /* we need to handle output ourselves since u-boot provides printf */
        opterr = 0;
 
+       memset(&long_opts[num_options], '\0', sizeof(*long_opts));
        /*
         * walk all of the options the user gave us on the command line,
         * figure out what u-boot option structure they belong to (via