From 4f02abda506190ca020f7758a2177aa6c5035c64 Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Fri, 15 Mar 2019 12:42:34 -0400 Subject: really don't crash on empty input --- interactive.c | 13 ++++++------- parse.c | 9 ++++++++- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/interactive.c b/interactive.c index c429513..6db84b0 100644 --- a/interactive.c +++ b/interactive.c @@ -45,21 +45,20 @@ int sh_interactive(void) break; } - if (!strcmp(cmdline, "\n")) { - free(cmdline); - continue; - } - struct command *command = sh_parse(cmdline); + #if 0 while (command == NULL) { /* append more text */ /* attempt parsing again */ } + #endif - sh_execute(command); + if (command) { + sh_execute(command); + sh_freecmd(command); + } free(cmdline); - sh_freecmd(command); } return 0; diff --git a/parse.c b/parse.c index 7763d26..39b3502 100644 --- a/parse.c +++ b/parse.c @@ -17,6 +17,8 @@ * */ +#define _XOPEN_SOURCE 700 + #include "sh.h" #include #include @@ -63,12 +65,17 @@ struct command *sh_parse(const char *cmdline) start++; } - char *end = l + strlen(l) - 1; + char *end = l + strlen(l); while (isspace(*end) && end > start) { *end = '\0'; end--; } + if (end <= start) { + free(l); + return NULL; + } + struct command *cmd = calloc(1, sizeof(*cmd)); if (cmd == NULL) { /* TODO: should probably crash here */ -- cgit v1.2.1