Avoid alias infloops.
authorColin Walters <walters@verbum.org>
Wed, 20 Aug 2008 19:01:20 +0000 (19:01 +0000)
committerColin Walters <walters@src.gnome.org>
Wed, 20 Aug 2008 19:01:20 +0000 (19:01 +0000)
2008-08-20  Colin Walters  <walters@verbum.org>

* girepository/girparser.c: Avoid alias infloops.

svn path=/trunk/; revision=420

ChangeLog
girepository/girparser.c

index db6ddfb..81009c8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-08-20  Colin Walters  <walters@verbum.org>
+
+       * girepository/girparser.c: Avoid alias infloops.
+
 2008-08-20  Colin Walters  <walters@verbum.org>
 
        * tests/scanner/foo-expected.gir: Fix expected list type.
index a4581e6..f15e3c1 100644 (file)
@@ -435,11 +435,16 @@ resolve_aliases (ParseContext *ctx, const gchar *type)
 {
   gpointer orig;
   gpointer value;
+  GSList *seen_values = NULL;
 
+  seen_values = g_slist_prepend (seen_values, type);
   while (g_hash_table_lookup_extended (ctx->aliases, type, &orig, &value))
     {
       g_debug ("Resolved: %s => %s", type, value);
       type = value;
+      if (g_slist_find_custom (seen_values, type, strcmp) != NULL)
+       break;
+      seen_values = g_slist_prepend (seen_values, type);
     }
   return type;
 }