From 609ee9d5a6664d8d8d690b4328b420aa54cc1e48 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrg=20Billeter?= Date: Sat, 19 Dec 2009 12:32:56 +0100 Subject: [PATCH] Fix crash with unsupported use of multi-dimensional array length Fixes bug 604589. --- codegen/valaccodearraymodule.vala | 2 ++ codegen/valaccodememberaccessmodule.vala | 3 +++ 2 files changed, 5 insertions(+) diff --git a/codegen/valaccodearraymodule.vala b/codegen/valaccodearraymodule.vala index 45928c117..ec7dd838f 100644 --- a/codegen/valaccodearraymodule.vala +++ b/codegen/valaccodearraymodule.vala @@ -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 diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala index c6d9e2fb5..9e242d08e 100644 --- a/codegen/valaccodememberaccessmodule.vala +++ b/codegen/valaccodememberaccessmodule.vala @@ -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; -- 2.47.3