# HG changeset patch # User Sadrul Habib Chowdhury # Date 1184997185 0 # Node ID cf7297803a73c981723ca4cfa08484597ed33177 # Parent 882ea30935a9a4d6cee0d178a958db933d7e7221 Guard against possible weird crashes. diff -r 882ea30935a9 -r cf7297803a73 finch/libgnt/gntutils.c --- a/finch/libgnt/gntutils.c Sat Jul 21 05:47:46 2007 +0000 +++ b/finch/libgnt/gntutils.c Sat Jul 21 05:53:05 2007 +0000 @@ -234,7 +234,7 @@ #ifndef NO_LIBXML static GntWidget * -gnt_widget_from_xmlnode(xmlNode *node, GntWidget **data[]) +gnt_widget_from_xmlnode(xmlNode *node, GntWidget **data[], int max) { GntWidget *widget = NULL; char *name; @@ -284,7 +284,7 @@ } for (ch = node->children; ch; ch=ch->next) - gnt_box_add_widget(GNT_BOX(widget), gnt_widget_from_xmlnode(ch, data)); + gnt_box_add_widget(GNT_BOX(widget), gnt_widget_from_xmlnode(ch, data, max)); } else if (strcmp(name, "button") == 0) { widget = gnt_button_new(content); } else if (strcmp(name, "label") == 0) { @@ -313,9 +313,10 @@ id = (char*)xmlGetProp(node, (xmlChar*)"id"); if (id) { int i; - sscanf(id, "%d", &i); - *data[i] = widget; - xmlFree(id); + if (sscanf(id, "%d", &i) == 1 && i >= 0 && i < max) { + *data[i] = widget; + xmlFree(id); + } } prop = (char*)xmlGetProp(node, (xmlChar*)"border"); @@ -366,7 +367,7 @@ data[id] = va_arg(list, gpointer); node = xmlDocGetRootElement(doc); - gnt_widget_from_xmlnode(node, data); + gnt_widget_from_xmlnode(node, data, num); xmlFreeDoc(doc); xmlCleanupParser();