diff --git a/ChangeLog b/ChangeLog index 121b0f0503..0dc992ef35 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-05-25 Matthias Clasen + + Bug 534694 – Col id in GtkListStore could be out of range + + * gtk/gtkliststore.c (list_store_start_element): Fix up error handling + a bit. Pointed out by Jan Arne Petersen. + 2008-05-25 Matthias Clasen Bug 532497 – Configure problem when cross-compiling diff --git a/gtk/gtkliststore.c b/gtk/gtkliststore.c index b1e3ba5ee1..f71836e1c3 100644 --- a/gtk/gtkliststore.c +++ b/gtk/gtkliststore.c @@ -2084,8 +2084,11 @@ list_store_start_element (GMarkupParseContext *context, ColInfo *info; if (data->row_column >= data->n_columns) - g_set_error (error, data->error_quark, 0, - "Too many columns, maximum is %d\n", data->n_columns - 1); + { + g_set_error (error, data->error_quark, 0, + "Too many columns, maximum is %d\n", data->n_columns - 1); + return; + } for (i = 0; names[i]; i++) if (strcmp (names[i], "id") == 0) @@ -2093,9 +2096,18 @@ list_store_start_element (GMarkupParseContext *context, errno = 0; id = atoi (values[i]); if (errno) - g_set_error (error, data->error_quark, 0, - "the id tag %s could not be converted to an integer", - values[i]); + { + g_set_error (error, data->error_quark, 0, + "the id tag %s could not be converted to an integer", + values[i]); + return; + } + if (id < 0 || id >= data->n_columns) + { + g_set_error (error, data->error_quark, 0, + "id value %d out of range", id); + return; + } } else if (strcmp (names[i], "translatable") == 0) { @@ -2113,8 +2125,11 @@ list_store_start_element (GMarkupParseContext *context, } if (id == -1) - g_set_error (error, data->error_quark, 0, - " needs an id attribute"); + { + g_set_error (error, data->error_quark, 0, + " needs an id attribute"); + return; + } info = g_slice_new0 (ColInfo); info->translatable = translatable;