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:
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