]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Fix crash when accessing arrays of unknown length
authorJürg Billeter <j@bitron.ch>
Thu, 11 Nov 2010 13:14:37 +0000 (14:14 +0100)
committerJürg Billeter <j@bitron.ch>
Thu, 11 Nov 2010 13:15:34 +0000 (14:15 +0100)
Fixes bug 634556.

codegen/valaccodememberaccessmodule.vala

index 5bfc603a06ca4d143f4e9ec5ff702c6056a87dbb..a544cba5b003d2a1add372373c020b8ff701b41b 100644 (file)
@@ -207,6 +207,10 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                                                set_array_size_cvalue (expr.target_value, new CCodeMemberAccess (inst, size_cname));
                                                        }
                                                }
+                                       } else {
+                                               for (int dim = 1; dim <= array_type.rank; dim++) {
+                                                       append_array_size (expr, new CCodeConstant ("-1"));
+                                               }
                                        }
                                } else if (delegate_type != null && delegate_type.delegate_symbol.has_target) {
                                        string target_cname = get_delegate_target_cname (field.get_cname ());
@@ -282,6 +286,10 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                                if (array_type.rank == 1 && field.is_internal_symbol ()) {
                                                        set_array_size_cvalue (expr.target_value, new CCodeIdentifier (get_array_size_cname (field.get_cname ())));
                                                }
+                                       } else {
+                                               for (int dim = 1; dim <= array_type.rank; dim++) {
+                                                       append_array_size (expr, new CCodeConstant ("-1"));
+                                               }
                                        }
                                } else if (delegate_type != null && delegate_type.delegate_symbol.has_target) {
                                        set_delegate_target_destroy_notify (expr, new CCodeConstant ("NULL"));
@@ -596,6 +604,10 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                                        }
                                                        append_array_size (expr, length_expr);
                                                }
+                                       } else {
+                                               for (int dim = 1; dim <= array_type.rank; dim++) {
+                                                       append_array_size (expr, new CCodeConstant ("-1"));
+                                               }
                                        }
                                }
                        }