summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2018-10-05 09:45:02 +0300
committerTimo Teräs <timo.teras@iki.fi>2018-10-05 09:45:02 +0300
commit40ffdfe623c73c3fdba15fd24bd05d206eff7aad (patch)
treec5d46f41827bdb9c25ac4a84de775351760317c0
parent0e3be0fd4a0ff8a373b2f8fc7a2a4da0687cb885 (diff)
downloadapk-tools-40ffdfe623c73c3fdba15fd24bd05d206eff7aad.tar.bz2
apk-tools-40ffdfe623c73c3fdba15fd24bd05d206eff7aad.tar.xz
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>
-rw-r--r--src/apk.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/apk.c b/src/apk.c
index 071d5ae..f4e510f 100644
--- a/src/apk.c
+++ b/src/apk.c
@@ -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++)