diff options
author | Timo Teräs <timo.teras@iki.fi> | 2018-10-05 09:45:02 +0300 |
---|---|---|
committer | Timo Teräs <timo.teras@iki.fi> | 2018-10-05 09:45:02 +0300 |
commit | 40ffdfe623c73c3fdba15fd24bd05d206eff7aad (patch) | |
tree | c5d46f41827bdb9c25ac4a84de775351760317c0 /src | |
parent | 0e3be0fd4a0ff8a373b2f8fc7a2a4da0687cb885 (diff) | |
download | apk-tools-40ffdfe623c73c3fdba15fd24bd05d206eff7aad.tar.gz apk-tools-40ffdfe623c73c3fdba15fd24bd05d206eff7aad.tar.bz2 apk-tools-40ffdfe623c73c3fdba15fd24bd05d206eff7aad.tar.xz apk-tools-40ffdfe623c73c3fdba15fd24bd05d206eff7aad.zip |
apk: fix all_options array size off-by-one
merge_options() will write one more entry to the options table
which is the end-of-table indicator. Allocate memory for it too.
valgrind did not pick it up due to being in stack; changing alloca
to malloc would make valgrind notice the issue too.
Reported-by: Mobile Stream <info@mobile-stream.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/apk.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -542,7 +542,7 @@ int main(int argc, char **argv) applet = deduce_applet(argc, argv); if (applet && applet->optgroups[0]) optgroups = applet->optgroups; - for (i = 0, num_options = 0; optgroups[i]; i++) + for (i = 0, num_options = 1; optgroups[i]; i++) num_options += optgroups[i]->num_options; all_options = alloca(sizeof(struct option) * num_options); for (i = r = 0; optgroups[i]; r += optgroups[i]->num_options, i++) |