]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix crash with unsupported use of multi-dimensional array length
authorJürg Billeter <j@bitron.ch>
Sat, 19 Dec 2009 11:32:56 +0000 (12:32 +0100)
committerJürg Billeter <j@bitron.ch>
Sat, 19 Dec 2009 11:33:34 +0000 (12:33 +0100)
Fixes bug 604589.

codegen/valaccodearraymodule.vala
codegen/valaccodememberaccessmodule.vala

index 45928c117ca003a6f5460f84edff622a3fd24e2d..ec7dd838f6a9a1468915c51986324725bb41c0c8 100644 (file)
@@ -411,6 +411,8 @@ internal class Vala.CCodeArrayModule : CCodeMethodCallModule {
                        if (lit != null && memberaccess != null) {
                                int dim = lit.value.to_int ();
                                expr.ccodenode = head.get_array_length_cexpression (memberaccess.inner, dim + 1);
+                       } else {
+                               Report.error (expr.source_reference, "only integer literals supported as index");
                        }
                } else if (container_type == string_type.data_type) {
                        // should be moved to a different module
index c6d9e2fb5bd4c93e875c5903262bb4b06bf390be..9e242d08ee162ae0480f9af3026e5cc02c4e9afe 100644 (file)
@@ -102,6 +102,9 @@ internal class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                expr.ccodenode = new CCodeIdentifier (m.get_cname ());
                        }
                } else if (expr.symbol_reference is ArrayLengthField) {
+                       if (expr.value_type is ArrayType && !(expr.parent_node is ElementAccess)) {
+                               Report.error (expr.source_reference, "unsupported use of length field of multi-dimensional array");
+                       }
                        expr.ccodenode = head.get_array_length_cexpression (expr.inner, 1);
                } else if (expr.symbol_reference is Field) {
                        var f = (Field) expr.symbol_reference;