Skip to content
Snippets Groups Projects
Commit 7bec628c authored by cxb23's avatar cxb23
Browse files

fixed double free issues

parent e98fad1d
Branches
No related tags found
No related merge requests found
...@@ -97,7 +97,7 @@ EOF ...@@ -97,7 +97,7 @@ EOF
@test "It handles quoted spaces" { @test "It handles quoted spaces" {
run "./dsh" <<EOF run "./dsh" <<EOF
echo " hello world " echo " hello world "
EOF EOF
# Strip all whitespace (spaces, tabs, newlines) from the output # Strip all whitespace (spaces, tabs, newlines) from the output
......
File deleted
File deleted
No preview for this file type
...@@ -56,16 +56,20 @@ int alloc_cmd_buff(cmd_buff_t *cmd_buff) { ...@@ -56,16 +56,20 @@ int alloc_cmd_buff(cmd_buff_t *cmd_buff) {
} }
int free_cmd_buff(cmd_buff_t *cmd_buff) { int free_cmd_buff(cmd_buff_t *cmd_buff) {
if (cmd_buff == NULL) return OK_EXIT;
free(cmd_buff->_cmd_buffer); free(cmd_buff->_cmd_buffer);
cmd_buff->_cmd_buffer = NULL;
for (int i = 0; i < CMD_ARGV_MAX - 1; i++) free(cmd_buff->argv[i]); for (int i = 0; i < CMD_ARGV_MAX - 1; i++) free(cmd_buff->argv[i]);
free(cmd_buff->argv);
free(cmd_buff); free(cmd_buff);
return OK_EXIT; return OK_EXIT;
} }
int clear_cmd_buff(cmd_buff_t *cmd_buff) { int clear_cmd_buff(cmd_buff_t *cmd_buff) {
cmd_buff->argc = 0; cmd_buff->argc = 0;
free(cmd_buff->_cmd_buffer); memset(cmd_buff->_cmd_buffer, 0, SH_CMD_MAX);
for (int i = 0; i < CMD_ARGV_MAX; i++) cmd_buff->argv[i] = NULL; for (int i = 0; i < CMD_ARGV_MAX; i++) cmd_buff->argv[i] = NULL;
return OK_EXIT; return OK_EXIT;
...@@ -95,12 +99,10 @@ int build_cmd_buff(char *cmd_line, cmd_buff_t *cmd_buff) { ...@@ -95,12 +99,10 @@ int build_cmd_buff(char *cmd_line, cmd_buff_t *cmd_buff) {
if ((int)strlen(cmd_line) > SH_CMD_MAX) return ERR_CMD_OR_ARGS_TOO_BIG; if ((int)strlen(cmd_line) > SH_CMD_MAX) return ERR_CMD_OR_ARGS_TOO_BIG;
if ((int)strlen(cmd_line) == 0) return WARN_NO_CMDS; if ((int)strlen(cmd_line) == 0) return WARN_NO_CMDS;
if (cmd_buff->_cmd_buffer) free(cmd_buff->_cmd_buffer);
cmd_buff->_cmd_buffer = strdup(trim_whitespace(cmd_line)); cmd_buff->_cmd_buffer = strdup(trim_whitespace(cmd_line));
if (cmd_buff->_cmd_buffer == NULL) { if (cmd_buff->_cmd_buffer == NULL) return ERR_MEMORY;
free(cmd_buff);
return ERR_MEMORY;
}
char *token = cmd_buff->_cmd_buffer; char *token = cmd_buff->_cmd_buffer;
bool quotes = false; bool quotes = false;
...@@ -176,7 +178,7 @@ int exec_local_cmd_loop() ...@@ -176,7 +178,7 @@ int exec_local_cmd_loop()
{ {
char *cmd_buff = malloc(ARG_MAX * sizeof(char)); char *cmd_buff = malloc(ARG_MAX * sizeof(char));
int rc = 0; int rc = 0;
cmd_buff_t *cmd = malloc(CMD_ARGV_MAX * sizeof(char *)); cmd_buff_t *cmd = malloc(sizeof(cmd_buff_t));
if ((rc = alloc_cmd_buff(cmd)) != OK_EXIT) exit(rc); if ((rc = alloc_cmd_buff(cmd)) != OK_EXIT) exit(rc);
...@@ -210,8 +212,9 @@ int exec_local_cmd_loop() ...@@ -210,8 +212,9 @@ int exec_local_cmd_loop()
// TODO IMPLEMENT parsing input to cmd_buff_t *cmd_buff // TODO IMPLEMENT parsing input to cmd_buff_t *cmd_buff
if ((rc = build_cmd_buff(cmd_buff, cmd)) != OK_EXIT) { if ((rc = build_cmd_buff(cmd_buff, cmd)) != OK_EXIT) {
free(cmd_buff);
free_cmd_buff(cmd);
exit(rc); exit(rc);
rc = 0;
} }
/* /*
if (strcmp(cmd->argv[0], "echo") == 0) { if (strcmp(cmd->argv[0], "echo") == 0) {
......
File moved
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment