From 429fae02ba60d1b55b73617688f4bdb94e830d8e Mon Sep 17 00:00:00 2001 From: Arnon Gilboa Date: Mon, 25 Oct 2010 12:02:06 +0200 Subject: spicec-win: remove redundent strdup & buggy free text refered a substr of item_dup and was used after free(item_dup). no need to strdup, we can destroy the resource string. --- client/controller.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'client/controller.cpp') diff --git a/client/controller.cpp b/client/controller.cpp index eabbcd45..cf06aa3a 100644 --- a/client/controller.cpp +++ b/client/controller.cpp @@ -348,7 +348,7 @@ bool ControllerConnection::create_menu(char* resource) { bool ret = true; char* item_state = 0; - char* item_dup; + char* next_item; const char* param; const char* text; int parent_id; @@ -361,15 +361,14 @@ bool ControllerConnection::create_menu(char* resource) AutoRef menu(new Menu((*app_menu)->get_target(), "")); char* item = next_tok(resource, CONTROLLER_MENU_ITEM_DELIMITER, &item_state); while (item != NULL) { - item_dup = strdup(item); - ret = ret && (param = next_tok(item_dup, CONTROLLER_MENU_PARAM_DELIMITER, &item_state)) && + next_item = item + strlen(item) + 1; + ret = ret && (param = next_tok(item, CONTROLLER_MENU_PARAM_DELIMITER, &item_state)) && sscanf(param, "%d", &parent_id); ret = ret && (param = next_tok(NULL, CONTROLLER_MENU_PARAM_DELIMITER, &item_state)) && sscanf(param, "%d", &id); ret = ret && (text = next_tok(NULL, CONTROLLER_MENU_PARAM_DELIMITER, &item_state)); ret = ret && (param = next_tok(NULL, CONTROLLER_MENU_PARAM_DELIMITER, &item_state)) && sscanf(param, "%d", &flags); - free(item_dup); if (!ret) { DBG(0, "item parsing failed %s", item); @@ -403,7 +402,7 @@ bool ControllerConnection::create_menu(char* resource) } (*sub_menu)->add_command(text, id, state); } - item = next_tok(item + strlen(item) + 1, CONTROLLER_MENU_ITEM_DELIMITER, &item_state); + item = next_tok(next_item, CONTROLLER_MENU_ITEM_DELIMITER, &item_state); } if (ret) { _handler->set_menu(*menu); -- cgit