From: Wolfgang Bumiller Date: Tue, 27 Aug 2013 08:09:31 +0000 (+0200) Subject: bail out when encountering an invalid array size in the ast as it's likely to cause... X-Git-Tag: 0.3.5~139^2~1 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=844e84fc16ac61404f66c042e5af09f00d68dcc4;p=xonotic%2Fgmqcc.git bail out when encountering an invalid array size in the ast as it's likely to cause breakage when trying to generate them anyway --- diff --git a/ast.c b/ast.c index 32ab1a2..1d13d8b 100644 --- a/ast.c +++ b/ast.c @@ -1396,8 +1396,10 @@ bool ast_global_codegen(ast_value *self, ir_builder *ir, bool isfield) } /* we are lame now - considering the way QC works we won't tolerate arrays > 1024 elements */ - if (!array->expression.count || array->expression.count > OPTS_OPTION_U32(OPTION_MAX_ARRAY_SIZE)) + if (!array->expression.count || array->expression.count > OPTS_OPTION_U32(OPTION_MAX_ARRAY_SIZE)) { compile_error(ast_ctx(self), "Invalid array of size %lu", (unsigned long)array->expression.count); + return false; + } elemtype = array->expression.next; vtype = elemtype->vtype; @@ -1463,8 +1465,10 @@ bool ast_global_codegen(ast_value *self, ir_builder *ir, bool isfield) } /* same as with field arrays */ - if (!self->expression.count || self->expression.count > OPTS_OPTION_U32(OPTION_MAX_ARRAY_SIZE)) + if (!self->expression.count || self->expression.count > OPTS_OPTION_U32(OPTION_MAX_ARRAY_SIZE)) { compile_error(ast_ctx(self), "Invalid array of size %lu", (unsigned long)self->expression.count); + return false; + } v = ir_builder_create_global(ir, self->name, vtype); if (!v) { @@ -1603,6 +1607,7 @@ static bool ast_local_codegen(ast_value *self, ir_function *func, bool param) /* we are lame now - considering the way QC works we won't tolerate arrays > 1024 elements */ if (!self->expression.count || self->expression.count > OPTS_OPTION_U32(OPTION_MAX_ARRAY_SIZE)) { compile_error(ast_ctx(self), "Invalid array of size %lu", (unsigned long)self->expression.count); + return false; } self->ir_values = (ir_value**)mem_a(sizeof(self->ir_values[0]) * self->expression.count);