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
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;
...@@ -96,11 +100,9 @@ int build_cmd_buff(char *cmd_line, cmd_buff_t *cmd_buff) { ...@@ -96,11 +100,9 @@ int build_cmd_buff(char *cmd_line, cmd_buff_t *cmd_buff) {
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