aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2020-10-09 12:42:31 +0200
committerCharles Cabergs <me@cacharle.xyz>2020-10-09 12:42:31 +0200
commiteeeeed44a9c7e8bd2f6a579bcace1f90d8a040ec (patch)
tree69dff03e1188e168af2ce5b2b7ce6a792999eb4b
parent6b200dc03c8233f6cd49111540002eb9b5aac4ec (diff)
downloadminishell-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.h3
m---------minishell_test0
-rw-r--r--src/lexer/lexer.c15
-rw-r--r--src/main.c11
-rw-r--r--src/parser/parser.c7
-rw-r--r--src/utils.c13
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);
}
diff --git a/src/main.c b/src/main.c
index f484e91..0e1b29d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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);
+}