Don't crash if a node has no name. (start_element_handler): Accept

2004-04-13  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkuimanager.c (get_child_node): Don't crash if a node
	has no name.
	(start_element_handler): Accept separators without unique
	names.  (#133302, Anders Carlsson)

	* gtk/gtkuimanager.c (node_remove_ui_reference): Don't leak
	list nodes.  (#138862, Morten Welinder)
This commit is contained in:
Matthias Clasen 2004-04-13 20:06:12 +00:00 committed by Matthias Clasen
parent 5854707bd9
commit 157943b584
8 changed files with 43 additions and 3 deletions

View File

@ -1,5 +1,10 @@
2004-04-13 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkuimanager.c (get_child_node): Don't crash if a node
has no name.
(start_element_handler): Accept separators without unique
names. (#133302, Anders Carlsson)
* gtk/gtkactiongroup.c (gtk_action_group_add_action): Document
possible accelerator gotcha when using this function. (#139641,
Christian Persch)

View File

@ -1,5 +1,10 @@
2004-04-13 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkuimanager.c (get_child_node): Don't crash if a node
has no name.
(start_element_handler): Accept separators without unique
names. (#133302, Anders Carlsson)
* gtk/gtkactiongroup.c (gtk_action_group_add_action): Document
possible accelerator gotcha when using this function. (#139641,
Christian Persch)

View File

@ -1,5 +1,10 @@
2004-04-13 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkuimanager.c (get_child_node): Don't crash if a node
has no name.
(start_element_handler): Accept separators without unique
names. (#133302, Anders Carlsson)
* gtk/gtkactiongroup.c (gtk_action_group_add_action): Document
possible accelerator gotcha when using this function. (#139641,
Christian Persch)

View File

@ -1,5 +1,10 @@
2004-04-13 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkuimanager.c (get_child_node): Don't crash if a node
has no name.
(start_element_handler): Accept separators without unique
names. (#133302, Anders Carlsson)
* gtk/gtkactiongroup.c (gtk_action_group_add_action): Document
possible accelerator gotcha when using this function. (#139641,
Christian Persch)

View File

@ -1,5 +1,10 @@
2004-04-13 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkuimanager.c (get_child_node): Don't crash if a node
has no name.
(start_element_handler): Accept separators without unique
names. (#133302, Anders Carlsson)
* gtk/gtkactiongroup.c (gtk_action_group_add_action): Document
possible accelerator gotcha when using this function. (#139641,
Christian Persch)

View File

@ -1,3 +1,7 @@
2004-04-13 Matthias Clasen <mclasen@redhat.com>
* gtk/tmpl/gtkuimanager.sgml: Some corrections.
2004-04-13 Federico Mena Quintero <federico@ximian.com>
* gtk/tmpl/gtkfilechooser.sgml: Typo fix.

View File

@ -29,6 +29,7 @@ roughly described by the following DTD.
&lt;!ATTLIST toolbar name &num;IMPLIED &gt;
&lt;!ATTLIST popup name &num;IMPLIED &gt;
&lt;!ATTLIST placeholder name &num;IMPLIED &gt;
&lt;!ATTLIST separator name &num;IMPLIED &gt;
&lt;!ATTLIST menu name &num;IMPLIED
action &num;REQUIRED
position (top|bot) &num;IMPLIED &gt;
@ -126,7 +127,7 @@ The most remarkable feature of #GtkUIManager is that it can overlay a set
of menuitems and toolitems over another one, and demerge them later.
</para>
<para>
Merging is done based on the name of the XML elements. Each element is
Merging is done based on the names of the XML elements. Each element is
identified by a path which consists of the names of its anchestors, separated
by slashes. For example, the menuitem named "Left" in the example above
has the path <literal>/ui/menubar/JustifyMenu/Left</literal> and the

View File

@ -824,7 +824,8 @@ get_child_node (GtkUIManager *self,
{
for (child = parent->children; child != NULL; child = child->next)
{
if (strlen (NODE_INFO (child)->name) == childname_length &&
if (NODE_INFO (child)->name &&
strlen (NODE_INFO (child)->name) == childname_length &&
!strncmp (NODE_INFO (child)->name, childname, childname_length))
{
/* if undecided about node type, set it */
@ -1215,15 +1216,24 @@ start_element_handler (GMarkupParseContext *context,
!strcmp (element_name, "separator"))
{
GNode *node;
gint length;
if (ctx->state == STATE_TOOLBAR)
ctx->state = STATE_TOOLITEM;
else
ctx->state = STATE_MENUITEM;
if (!strcmp (node_name, "separator"))
{
node_name = NULL;
length = -1;
}
else
length = strlen (node_name);
node = get_child_node (self, ctx->current,
node_name, strlen (node_name),
node_name, length,
NODE_TYPE_SEPARATOR,
TRUE, top);
if (NODE_INFO (node)->action_name == 0)
NODE_INFO (node)->action_name = action_quark;