From: Jürg Billeter Date: Tue, 22 Jul 2008 14:50:59 +0000 (+0000) Subject: Fix crash when using multi-dimensional arrays, patch by Amos Brocco, fixes X-Git-Tag: VALA_0_3_5~33 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f7e05d152fb7f22e818d3727fd41e4f20a3f2b39;p=thirdparty%2Fvala.git Fix crash when using multi-dimensional arrays, patch by Amos Brocco, fixes 2008-07-22 Jürg Billeter * gobject/valaccodearraycreationexpressionbinding.vala: Fix crash when using multi-dimensional arrays, patch by Amos Brocco, fixes bug 544145 svn path=/trunk/; revision=1721 --- diff --git a/ChangeLog b/ChangeLog index bfdba0eef..612755079 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-07-22 Jürg Billeter + + * gobject/valaccodearraycreationexpressionbinding.vala: + + Fix crash when using multi-dimensional arrays, + patch by Amos Brocco, fixes bug 544145 + 2008-07-22 Jürg Billeter * vala/valaparser.vala: diff --git a/THANKS b/THANKS index 0671c84a3..450afa99e 100644 --- a/THANKS +++ b/THANKS @@ -3,6 +3,7 @@ The Vala team would like to thank the following contributors: Alberto Ruiz Alexandre Moreira Ali Sabil +Amos Brocco Andrea Del Signore Andreas Brauchli Arwed von Merkatz diff --git a/gobject/valaccodearraycreationexpressionbinding.vala b/gobject/valaccodearraycreationexpressionbinding.vala index b002fd839..4db9a3fb2 100644 --- a/gobject/valaccodearraycreationexpressionbinding.vala +++ b/gobject/valaccodearraycreationexpressionbinding.vala @@ -44,6 +44,8 @@ public class Vala.CCodeArrayCreationExpressionBinding : CCodeExpressionBinding { gnew.add_argument (new CCodeIdentifier (expr.element_type.get_cname ())); bool first = true; CCodeExpression cexpr = null; + + // iterate over each dimension foreach (Expression size in expr.get_sizes ()) { CCodeExpression csize = (CCodeExpression) size.ccodenode; @@ -57,11 +59,6 @@ public class Vala.CCodeArrayCreationExpressionBinding : CCodeExpressionBinding { csize = new CCodeParenthesizedExpression (new CCodeAssignment (name_cnode, csize)); } - if (expr.element_type.data_type != null && expr.element_type.data_type.is_reference_type ()) { - // add extra item to have array NULL-terminated for all reference types - csize = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, csize, new CCodeConstant ("1")); - } - if (first) { cexpr = csize; first = false; @@ -69,6 +66,12 @@ public class Vala.CCodeArrayCreationExpressionBinding : CCodeExpressionBinding { cexpr = new CCodeBinaryExpression (CCodeBinaryOperator.MUL, cexpr, csize); } } + + // add extra item to have array NULL-terminated for all reference types + if (expr.element_type.data_type != null && expr.element_type.data_type.is_reference_type ()) { + cexpr = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, cexpr, new CCodeConstant ("1")); + } + gnew.add_argument (cexpr); if (expr.initializer_list != null) {