From 93e54a90f069f174dc11a72fdeb5a18111ebaab7 Mon Sep 17 00:00:00 2001 From: Remco de Man Date: Tue, 5 Dec 2017 16:45:03 +0100 Subject: [PATCH] Fixing stack smashing possibility for get_flags. --- arg_parse.c | 3 ++- arg_parse.h | 2 +- cmd_mains.c | 16 ++++++++-------- misc.h | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/arg_parse.c b/arg_parse.c index 1190643..56ddca5 100644 --- a/arg_parse.c +++ b/arg_parse.c @@ -58,8 +58,9 @@ char **get_args(char *s, int index) return args; } -char *get_flags(char *buf, char *flags) +char *get_flags(char *buf) { + char* flags = (char *) malloc(BUFSIZE); while (*buf != '\0') { if (*buf == '-') { buf++; diff --git a/arg_parse.h b/arg_parse.h index bae0104..6454fbb 100644 --- a/arg_parse.h +++ b/arg_parse.h @@ -6,6 +6,6 @@ int get_argc(char *s); char *skip_flag(char *s); char **get_args(char *s, int index); -char *get_flags(char *buf, char *flags); +char *get_flags(char *buf); #endif diff --git a/cmd_mains.c b/cmd_mains.c index 5f0af46..64ab65a 100644 --- a/cmd_mains.c +++ b/cmd_mains.c @@ -3,11 +3,11 @@ int rm_main(char *buf) { - char **args, flags[5]; + char **args, *flags; int pflag = 0, vflag = 0, rflag = 0, hflag = 0, i = 0; args = get_args(buf, 2); - get_flags(buf, flags); + flags = get_flags(buf); if (flags[0] != '\0') { do { @@ -51,11 +51,11 @@ int rm_main(char *buf) int ls_main(char *buf) { - char **args, flags[4]; + char **args; int aflag = 0, iflag = 0, rflag = 0, hflag = 0, i = 0; args = get_args(buf, 2); - get_flags(buf, flags); + flags = get_flags(buf); if (flags[0] != '\0') { do { @@ -101,11 +101,11 @@ int ls_main(char *buf) int mkdir_main(char *buf) { - char **args, flags[5]; + char **args; int vflag = 0, hflag = 0, i = 0; args = get_args(buf, 5); - get_flags(buf, flags); + flags = get_flags(buf, flags); if (flags[0] != '\0') { do { @@ -144,11 +144,11 @@ int mkdir_main(char *buf) int cat_main(char *buf) { - char **args, flags[5]; + char **args; int nflag = 0, hflag = 0, i = 0; args = get_args(buf, 3); - get_flags(buf, flags); + flags = get_flags(buf, flags); if (flags[0] != '\0') { do { diff --git a/misc.h b/misc.h index f250de4..4a34755 100644 --- a/misc.h +++ b/misc.h @@ -29,7 +29,7 @@ void usage(void); int get_argc(char *s); char **get_args(char *s, int index); char *skip_flags(char *s); -char *get_flags(char *buf, char *flags); +char *get_flags(char *buf); bool prompt(char *fmt, ...); #endif