From 92c2439b564ddd892f42c0cbb0928d3f0c169bb0 Mon Sep 17 00:00:00 2001
From: Abdelrahman <said.abdelrahman89@gmail.com>
Date: Sun, 16 Jun 2024 23:29:19 +0100
Subject: [PATCH] Ensure cleanup on command failure

---
 src/common/shell/commander/commander.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/common/shell/commander/commander.c b/src/common/shell/commander/commander.c
index f67ce37..4091e78 100644
--- a/src/common/shell/commander/commander.c
+++ b/src/common/shell/commander/commander.c
@@ -28,6 +28,7 @@ CMDResult run_command(CMDOutHandling out_handling, char *out_buf, u64 buf_size,
   char cmd[CMD_BUF_LEN] = {0};
   CMDError err = build_command_from_args(cmd, CMD_BUF_LEN, args);
   if (err > SHELL_ERR_NO_ERROR) {
+    va_end(args);
     return CMD_NO_EXIT(err);
   }
 
@@ -67,6 +68,8 @@ internal inline CMDResult execute_command(const char *cmd,
 
   CMDError err = get_command_output(fp, out_handling, out_buf, buf_size);
   if (err > SHELL_ERR_NO_ERROR) {
+    // Ensure process is closed on failure
+    wapp_shell_utils_pclose(fp);
     return CMD_NO_EXIT(err);
   }
 
@@ -109,6 +112,8 @@ internal inline CMDError get_command_output(FILE *fp,
 internal inline CMDError get_output_status(FILE *fp, i32 *status_out) {
 #ifdef WAPP_PLATFORM_WINDOWS
   if (!feof(fp)) {
+    // Ensure process is closed on failure
+    wapp_shell_utils_pclose(fp);
     return SHELL_ERR_PROC_EXIT_FAIL;
   }
 #endif /* ifdef WAPP_PLATFORM_WINDOWS */