summaryrefslogtreecommitdiff
path: root/modutils/insmod.c
diff options
context:
space:
mode:
authorDenis Vlasenko2007-06-13 06:47:47 +0000
committerDenis Vlasenko2007-06-13 06:47:47 +0000
commitd67cef2425fb5e75b75d52d9a308da6d29cd7a0d (patch)
tree5d034f518dfae9a933a701e8c42da4acbf0cb42d /modutils/insmod.c
parentf5f75c5e82d47613847c356664e47c4be69e73aa (diff)
downloadbusybox-d67cef2425fb5e75b75d52d9a308da6d29cd7a0d.zip
busybox-d67cef2425fb5e75b75d52d9a308da6d29cd7a0d.tar.gz
hush: fix read builtin to not read ahead past eol and to not use
insane amounts of stack. Testsuite updated.
Diffstat (limited to 'modutils/insmod.c')
-rw-r--r--modutils/insmod.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/modutils/insmod.c b/modutils/insmod.c
index a81ca7f..b9d8a02 100644
--- a/modutils/insmod.c
+++ b/modutils/insmod.c
@@ -4262,6 +4262,7 @@ int insmod_ng_main(int argc, char **argv)
{
long ret;
size_t len;
+ int optlen;
void *map;
char *filename, *options;
@@ -4270,12 +4271,12 @@ int insmod_ng_main(int argc, char **argv)
bb_show_usage();
/* Rest is options */
- options = xstrdup("");
+ options = xzalloc(1);
+ optlen = 0;
while (*++argv) {
- int optlen = strlen(options);
options = xrealloc(options, optlen + 2 + strlen(*argv) + 2);
/* Spaces handled by "" pairs, but no way of escaping quotes */
- sprintf(options + optlen, (strchr(*argv,' ') ? "\"%s\" " : "%s "), *argv);
+ optlen += sprintf(options + optlen, (strchr(*argv,' ') ? "\"%s\" " : "%s "), *argv);
}
#if 0