diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2020-10-09 12:42:31 +0200 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2020-10-09 12:42:31 +0200 |
| commit | eeeeed44a9c7e8bd2f6a579bcace1f90d8a040ec (patch) | |
| tree | 69dff03e1188e168af2ce5b2b7ce6a792999eb4b | |
| parent | 6b200dc03c8233f6cd49111540002eb9b5aac4ec (diff) | |
| download | minishell-eeeeed44a9c7e8bd2f6a579bcace1f90d8a040ec.tar.gz minishell-eeeeed44a9c7e8bd2f6a579bcace1f90d8a040ec.tar.bz2 minishell-eeeeed44a9c7e8bd2f6a579bcace1f90d8a040ec.zip | |
Fixing parenthesis leak in parser, Fixing crash on empty input
| -rw-r--r-- | include/minishell.h | 3 | ||||
| m--------- | minishell_test | 0 | ||||
| -rw-r--r-- | src/lexer/lexer.c | 15 | ||||
| -rw-r--r-- | src/main.c | 11 | ||||
| -rw-r--r-- | src/parser/parser.c | 7 | ||||
| -rw-r--r-- | src/utils.c | 13 |
6 files changed, 23 insertions, 26 deletions
diff --git a/include/minishell.h b/include/minishell.h index cfc8b42..cba92df 100644 --- a/include/minishell.h +++ b/include/minishell.h @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/26 15:33:51 by cacharle #+# #+# */ -/* Updated: 2020/10/08 17:42:07 by cacharle ### ########.fr */ +/* Updated: 2020/10/09 12:41:09 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -139,6 +139,7 @@ void signal_sigterm(int signum); void print_prompt(void); void exit_if(bool predicate); +bool utils_strisblank(char *str); /* ** setup.c diff --git a/minishell_test b/minishell_test -Subproject 84b23010e0d0515ad3ed17a605440e50439781e +Subproject 9ce56e51327c1b8eb4ba09a3521ff9ff4079d28 diff --git a/src/lexer/lexer.c b/src/lexer/lexer.c index 466e360..9b947f4 100644 --- a/src/lexer/lexer.c +++ b/src/lexer/lexer.c @@ -6,7 +6,7 @@ /* By: nahaddac <nahaddac@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/07/16 08:18:25 by nahaddac #+# #+# */ -/* Updated: 2020/10/08 09:21:55 by cacharle ### ########.fr */ +/* Updated: 2020/10/09 12:29:32 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -108,22 +108,9 @@ t_tok_lst *create_token_list(char *input, t_tok_lst **lst) int lexer(char *input, t_tok_lst **out) { int status; - /* t_tok_lst *curr; */ - if (!input) - return (2); *out = NULL; *out = create_token_list(input, out); status = lexer_trim(*out); - /* curr = *out; */ - /* while (curr != NULL) */ - /* { */ - /* if (!(curr->tag & TAG_IS_STR)) */ - /* { */ - /* free(curr->content); */ - /* curr->content = NULL; */ - /* } */ - /* curr = curr->next; */ - /* } */ return (status); } @@ -6,7 +6,7 @@ /* By: cacharle <cacharle@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/28 11:45:44 by cacharle #+# #+# */ -/* Updated: 2020/10/09 09:39:22 by cacharle ### ########.fr */ +/* Updated: 2020/10/09 12:39:36 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,13 +23,6 @@ int debug_lexer(char *input); int debug_parser(char *input); -/* -** TODO -** signal whole line -** path optimisation on command not found -** path tricks -*/ - t_state g_state; int execute(t_env env, char *input) @@ -39,6 +32,8 @@ int execute(t_env env, char *input) t_parsed *parser_out; int fds[2]; + if (utils_strisblank(input)) + return (0); status = lexer(input, &lexer_out); if (status != 0) { diff --git a/src/parser/parser.c b/src/parser/parser.c index e861232..9d5a99d 100644 --- a/src/parser/parser.c +++ b/src/parser/parser.c @@ -6,7 +6,7 @@ /* By: nahaddac <nahaddac@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/17 18:09:04 by nahaddac #+# #+# */ -/* Updated: 2020/10/09 11:10:55 by cacharle ### ########.fr */ +/* Updated: 2020/10/09 12:35:51 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -107,7 +107,6 @@ t_parsed *parse_pipeline(t_tok_lst *input) { ast_destroy(expr->ast); free(expr); - /* tok_lst_destroy(expr->rest, free); */ return (parsed_error("syntax error expected token")); } tail = parse_pipeline(expr->rest); @@ -211,7 +210,11 @@ t_parsed *parse_expr(t_tok_lst *input) return (parsed); input = parsed->rest; if (input == NULL || !(input->tag & TAG_PARENT_CLOSE)) + { + ast_destroy(parsed->ast); + free(parsed); return (parsed_error("syntax error expected token")); + } tok_lst_pop_front(&input, free); if ((ast = ast_new(AST_PARENT)) == NULL) return (NULL); diff --git a/src/utils.c b/src/utils.c index b733172..2fffe45 100644 --- a/src/utils.c +++ b/src/utils.c @@ -6,7 +6,7 @@ /* By: cacharle <cacharle@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/28 11:56:31 by cacharle #+# #+# */ -/* Updated: 2020/10/09 08:11:23 by cacharle ### ########.fr */ +/* Updated: 2020/10/09 12:40:51 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -47,3 +47,14 @@ void exit_if(bool predicate) ft_putendl_fd("minishell: fatal error", STDERR_FILENO); exit(3); } + +bool utils_strisblank(char *str) +{ + while (*str != '\0') + { + if (!ft_isblank(*str)) + return (false); + str++; + } + return (true); +} |
