Rob Shearman : widl: Fix crash when trying to declare a fixed size array with a size_is attribute .

Alexandre Julliard julliard at winehq.org
Tue Mar 23 12:12:50 CDT 2010


Module: wine
Branch: master
Commit: 50534b87d0702965339b365258f246d3f6b6501f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=50534b87d0702965339b365258f246d3f6b6501f

Author: Rob Shearman <robertshearman at gmail.com>
Date:   Tue Mar 23 13:33:21 2010 +0000

widl: Fix crash when trying to declare a fixed size array with a size_is attribute.

In this case type_array_get_conformance will return NULL. The code
here is actually replacing an existing array with an EXPR_VOID
conformance with the specified conformance, so issue an error if
type_array_get_conformance returns NULL or the conformance has already
been defined.

---

 tools/widl/parser.y |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/tools/widl/parser.y b/tools/widl/parser.y
index 8a23a82..c3e1af4 100644
--- a/tools/widl/parser.y
+++ b/tools/widl/parser.y
@@ -1514,8 +1514,9 @@ static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const decl
     {
       if (is_array(*ptype))
       {
-        if (type_array_get_conformance(*ptype)->is_const)
-          error_loc("%s: cannot specify size_is for a fixed sized array\n", v->name);
+        if (!type_array_get_conformance(*ptype) ||
+            type_array_get_conformance(*ptype)->type != EXPR_VOID)
+          error_loc("%s: cannot specify size_is for an already sized array\n", v->name);
         else
           *ptype = type_new_array((*ptype)->name,
                                   type_array_get_element(*ptype), FALSE,




More information about the wine-cvs mailing list