]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
dova: Fix crash on replaced expressions in list and set literals
authorJürg Billeter <j@bitron.ch>
Thu, 30 Sep 2010 19:27:50 +0000 (21:27 +0200)
committerJürg Billeter <j@bitron.ch>
Sun, 3 Oct 2010 17:32:11 +0000 (19:32 +0200)
vala/valalistliteral.vala
vala/valasetliteral.vala

index f816550cbfbe63a8dcad2bf9813449e9da5abe2a..e3c6d6de9c7af5aef72531da80c36f6e74c21401 100644 (file)
@@ -95,13 +95,19 @@ public class Vala.ListLiteral : Literal {
                        fixed_element_type = true;
                }
 
-               foreach (var expr in expression_list) {
+               for (int i = 0; i < expression_list.size; i++) {
+                       var expr = expression_list[i];
+
                        if (fixed_element_type) {
                                expr.target_type = element_type;
                        }
                        if (!expr.check (analyzer)) {
                                return false;
                        }
+
+                       // expression might have been replaced in the list
+                       expr = expression_list[i];
+
                        if (element_type == null) {
                                element_type = expr.value_type.copy ();
                                element_type.value_owned = false;
index 42be178d594c9d656171b3dfba5f8c4963e08d83..5ae8e94bbac87681f52866b5261b130f57a47cc7 100644 (file)
@@ -79,13 +79,19 @@ public class Vala.SetLiteral : Literal {
                        fixed_element_type = true;
                }
 
-               foreach (var expr in expression_list) {
+               for (int i = 0; i < expression_list.size; i++) {
+                       var expr = expression_list[i];
+
                        if (fixed_element_type) {
                                expr.target_type = element_type;
                        }
                        if (!expr.check (analyzer)) {
                                return false;
                        }
+
+                       // expression might have been replaced in the list
+                       expr = expression_list[i];
+
                        if (element_type == null) {
                                element_type = expr.value_type.copy ();
                                element_type.value_owned = false;