From c4487762684f94134d37c73bf3484ba1effd3bef Mon Sep 17 00:00:00 2001 From: "william.valenduc" Date: Thu, 29 Jan 2026 19:56:21 +0000 Subject: [PATCH] fix(execution): var update leak --- src/execution/execution.c | 2 -- src/execution/execution_helpers.c | 13 +------------ src/execution/execution_helpers.h | 1 - 3 files changed, 1 insertion(+), 15 deletions(-) diff --git a/src/execution/execution.c b/src/execution/execution.c index be3b378..cf751f7 100644 --- a/src/execution/execution.c +++ b/src/execution/execution.c @@ -40,8 +40,6 @@ int execution(struct ast *ast, struct hash_map *vars) return exec_ast_list(ast_get_list(ast), vars); case AST_AND_OR: return exec_ast_and_or(ast_get_and_or(ast), vars); - case AST_ASSIGNMENT: - return exec_ast_assignment(ast_get_assignment(ast), vars); default: return 127; } diff --git a/src/execution/execution_helpers.c b/src/execution/execution_helpers.c index c77c9b3..3166578 100644 --- a/src/execution/execution_helpers.c +++ b/src/execution/execution_helpers.c @@ -137,10 +137,7 @@ static int exec_assignment(struct list *assignment_list, struct hash_map *vars) struct ast_assignment *assignment = ast_get_assignment(assignment_list->data); - char *key = strdup(assignment->name); - char *value = strdup(assignment->value); - hash_map_insert(vars, key, value, NULL); - + set_var_copy(vars, assignment->name, assignment->value); assignment_list = assignment_list->next; } return 0; @@ -148,7 +145,6 @@ static int exec_assignment(struct list *assignment_list, struct hash_map *vars) int exec_ast_command(struct ast_command *command, struct hash_map *vars) { - (void)vars; exec_assignment(command->assignments, vars); set_all_redir(command->redirections); @@ -203,13 +199,6 @@ int exec_ast_command(struct ast_command *command, struct hash_map *vars) return 1; } - -int exec_ast_assignment(struct ast_assignment *assign, struct hash_map *vars) -{ - set_var_copy(vars, assign->name, assign->value); - return 0; -} - int exec_ast_if(struct ast_if *if_node, struct hash_map *vars) { int cond = execution(if_node->condition, vars); diff --git a/src/execution/execution_helpers.h b/src/execution/execution_helpers.h index 9fbe90a..ebf6858 100644 --- a/src/execution/execution_helpers.h +++ b/src/execution/execution_helpers.h @@ -8,7 +8,6 @@ int exec_ast_command(struct ast_command *command, struct hash_map *vars); int exec_ast_if(struct ast_if *if_node, struct hash_map *vars); int exec_ast_list(struct ast_list *list_node, struct hash_map *vars); int exec_ast_and_or(struct ast_and_or *ao_node, struct hash_map *vars); -int exec_ast_assignment(struct ast_assignment *assign, struct hash_map *vars); void unset_all_redir(struct list *redir_list); #endif // EXECUTION_HELPERS_H