diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2010-11-13 12:44:55 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2010-12-04 15:39:05 +0100 |
commit | 1123159dc99b7fe792d2bb904bb6f834f4a84b82 (patch) | |
tree | 15c9da7c695aa542a707b2bb2acdb253f1cceaab | |
parent | 9bb96e271d523c61a9eda6794b5f540b40470304 (diff) | |
download | gtk+-1123159dc99b7fe792d2bb904bb6f834f4a84b82.tar.gz |
GtkCssProvider: Handle better wrong enum/flag values.
-rw-r--r-- | gtk/gtkcssprovider.c | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index 3b112a9102..2d1b0f09ab 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -2514,14 +2514,22 @@ css_provider_parse_value (GtkCssProvider *css_provider, } else if (G_TYPE_IS_ENUM (type)) { - GEnumClass *class; + GEnumClass *enum_class; GEnumValue *enum_value; - class = g_type_class_ref (type); - enum_value = g_enum_get_value_by_nick (class, value_str); + enum_class = g_type_class_ref (type); + enum_value = g_enum_get_value_by_nick (enum_class, value_str); - g_value_set_enum (value, enum_value->value); - g_type_class_unref (class); + if (!enum_value) + { + g_warning ("Unknown value '%s' for enum type '%s'", + value_str, g_type_name (type)); + parsed = FALSE; + } + else + g_value_set_enum (value, enum_value->value); + + g_type_class_unref (enum_class); } else if (G_TYPE_IS_FLAGS (type)) { @@ -2535,7 +2543,7 @@ css_provider_parse_value (GtkCssProvider *css_provider, /* Parse comma separated values */ ptr = strchr (value_str, ','); - while (ptr) + while (ptr && parsed) { gchar *flag_str; @@ -2547,8 +2555,11 @@ css_provider_parse_value (GtkCssProvider *css_provider, g_strstrip (flag_str)); if (!flag_value) - g_warning ("Unknown flag '%s' for type '%s'", - value_str, g_type_name (type)); + { + g_warning ("Unknown flag '%s' for type '%s'", + value_str, g_type_name (type)); + parsed = FALSE; + } else flags |= flag_value->value; @@ -2560,13 +2571,17 @@ css_provider_parse_value (GtkCssProvider *css_provider, flag_value = g_flags_get_value_by_nick (flags_class, value_str); if (!flag_value) - g_warning ("Unknown flag '%s' for type '%s'", - value_str, g_type_name (type)); + { + g_warning ("Unknown flag '%s' for type '%s'", + value_str, g_type_name (type)); + parsed = FALSE; + } else flags |= flag_value->value; - /* Set parsed flags */ - g_value_set_enum (value, flags); + if (parsed) + g_value_set_enum (value, flags); + g_type_class_unref (flags_class); } else if (type == GTK_TYPE_9SLICE) |