summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnon Gilboa <agilboa@redhat.com>2010-10-25 12:02:06 +0200
committerArnon Gilboa <agilboa@redhat.com>2010-10-25 13:22:24 +0200
commit429fae02ba60d1b55b73617688f4bdb94e830d8e (patch)
tree61562f5ae750a4a19f1ba459a278b84cf15f08e8
parenta1cef5b81a60c439c87637507f818a49fe96c60e (diff)
downloadspice-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.cpp9
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);