rp

simple email tools
git clone https://git.parazyd.org/rp
Log | Files | Refs | README | LICENSE

commit 2e9ef323aae879b73ac5b24d084628dfe65055df
parent 3687d0c3c958ddc58b34c40e7ccd7e31ec4365a3
Author: parazyd <parazyd@dyne.org>
Date:   Sat,  3 Mar 2018 22:51:58 +0100

Fix some segfaults on invalid calls.

Diffstat:
Mrohrpost.c | 11+++++++----
Mutil.c | 23++++++++++++-----------
Mutil.h | 6+++++-
3 files changed, 24 insertions(+), 16 deletions(-)

diff --git a/rohrpost.c b/rohrpost.c @@ -15,7 +15,7 @@ char *argv0; void usage(void) { - die("usage: %s cmd [args]\n", argv0); + die("usage: %s [-hil] cmd [args]\n", argv0); } struct command { @@ -37,6 +37,7 @@ struct command cmds[] = { }; int main(int argc, char *argv[]) { + int i; char *lsl; @@ -52,12 +53,12 @@ int main(int argc, char *argv[]) { return cmds[i].main(argc, argv); } - ARGBEGIN { case 'i': - for (i = 0; i < nelem(cmds); i++) + for (i = 0; i < nelem(cmds); i++) { if (cmds[i].flags & DOINSTALL) printf("%s\n", cmds[i].cmd); + } return 0; case 'l': for (i = 0; i < nelem(cmds); i++) @@ -68,11 +69,13 @@ int main(int argc, char *argv[]) { } ARGEND; if (argc > 0) { - for (i = 0; nelem(cmds); i++) { + for (i = 0; i < nelem(cmds); i++) { if (!strcmp(argv[0], cmds[i].cmd)) return cmds[i].main(argc, argv); } } usage(); + + return 1; } diff --git a/util.c b/util.c @@ -112,34 +112,35 @@ getfprend: } int utilmain(int argc, char *argv[]) { - char *runcmd, *cmdarg; + char *runcmd; runcmd = NULL; - cmdarg = NULL; ARGBEGIN { case 'e': runcmd = EARGF(utilusage()); - if (argc > 1) { - cmdarg = argv[1]; - } break; default: utilusage(); } ARGEND; + if (runcmd == NULL) + utilusage(); + if (!strncmp("genmsgid", runcmd, 8)) return genmsgid(); if (!strncmp("genmimeb", runcmd, 8)) return genmimeb(); - if (cmdarg) { - if (!strncmp("humansize", runcmd, 9)) - return humansize(atol(cmdarg)); - if (!strncmp("getfpr", runcmd, 6)) - return getfpr(cmdarg); - } + if (argc < 1) + utilusage(); + + if (!strncmp("humansize", runcmd, 9)) + return humansize(atol(argv[0])); + + if (!strncmp("getfpr", runcmd, 6)) + return getfpr(argv[0]); utilusage(); return 1; diff --git a/util.h b/util.h @@ -7,10 +7,14 @@ #define __RPUTIL_H__ int utilmain(int argc, char *argv[]); -int randint(int max); + +int *randint(int max); char *randstring(char *str, size_t size); + int genmsgid(void); int genmimeb(void); + int humansize(unsigned long amnt); +int getfpr(char *desc); #endif