diff options
author | Arnon Gilboa <agilboa@redhat.com> | 2010-10-25 12:02:06 +0200 |
---|---|---|
committer | Arnon Gilboa <agilboa@redhat.com> | 2010-10-25 13:22:24 +0200 |
commit | 429fae02ba60d1b55b73617688f4bdb94e830d8e (patch) | |
tree | 61562f5ae750a4a19f1ba459a278b84cf15f08e8 | |
parent | a1cef5b81a60c439c87637507f818a49fe96c60e (diff) | |
download | spice-429fae02ba60d1b55b73617688f4bdb94e830d8e.tar.gz spice-429fae02ba60d1b55b73617688f4bdb94e830d8e.tar.xz spice-429fae02ba60d1b55b73617688f4bdb94e830d8e.zip |
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.
-rw-r--r-- | client/controller.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
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> 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); |