From 22c2f9ba02049b69aee9837a61a2581b4eca390f Mon Sep 17 00:00:00 2001 From: Nathan Lebrun Date: Thu, 6 Feb 2025 10:04:26 +0100 Subject: [PATCH] crash fix --- .gitignore | 6 ++++++ lib/libft/srcs/format/ft_tabstr.c | 2 +- srcs/parsing/ast/free_ast.c | 33 ++++++++++++++++++------------- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index 7541b27..07d42ac 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,9 @@ minishell .objs/* ast.xml .TEST_objs + +file +file2 +file3 +file4 +file5 diff --git a/lib/libft/srcs/format/ft_tabstr.c b/lib/libft/srcs/format/ft_tabstr.c index d43196b..89b8dca 100644 --- a/lib/libft/srcs/format/ft_tabstr.c +++ b/lib/libft/srcs/format/ft_tabstr.c @@ -24,7 +24,7 @@ char *ft_tabstr(char **tab) while (tab[++i]) alloc_count += ft_strlen(tab[i]) + 1; i = 0; - out = tab[0]; + out = ft_strdup(tab[0]); while (tab[++i]) { tmp = out; diff --git a/srcs/parsing/ast/free_ast.c b/srcs/parsing/ast/free_ast.c index 2039652..969e698 100644 --- a/srcs/parsing/ast/free_ast.c +++ b/srcs/parsing/ast/free_ast.c @@ -17,34 +17,39 @@ static void free_redirs(t_ast_n *node) free(node->redir); if (node->files) free_tab(node->files); - free_tab(node->args); +} + +static void free_cmd(t_ast_n *node) +{ + free(node->cmd); + free_redirs(node); + free_tab(node->args); +} + +static void free_pline(t_ast_n *node) +{ + int i; + + i = -1; + while (node->pline[++i]) + free_ast(node->pline[i]); } void free_ast(t_ast_n *node) { - int i; - if (node->state == _AND || node->state == _OR) { free_ast(node->left); free_ast(node->right); } - else if (node->state == _PLINE) - { - i = -1; - while (node->pline[++i]) - free_ast(node->pline[i]); - } else if (node->state == _SUBSH) { free_ast(node->left); free_redirs(node); } + else if (node->state == _PLINE) + free_pline(node); else - { - free(node->cmd); - free_redirs(node); - } - + free_cmd(node); free(node); }