Commit d18734b5 by Ian Lance Taylor

compiler: avoid crashing on invalid non-integer array length

    
    Tweak the array type checking code to avoid crashing on array types
    whose length expressions are explicit non-integer types (for example,
    "float64(10)"). If such constructs are seen, issue an "invalid array
    bound" error.
    
    Fixes golang/go#13486.
    
    Reviewed-on: https://go-review.googlesource.com/91975

From-SVN: r259900
parent 4e0c5f94
e367bffce3d2c49b456fdf41ab097bded2bcbc3b 85ca682349af2cb1aa6b1eecac794aeb73d24f15
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -7016,6 +7016,16 @@ Array_type::verify_length() ...@@ -7016,6 +7016,16 @@ Array_type::verify_length()
return false; return false;
} }
// For array types, the length expression can be an untyped constant
// representable as an int, but we don't allow explicitly non-integer
// values such as "float64(10)". See issues #13485 and #13486.
if (this->length_->type()->integer_type() == NULL
&& !this->length_->type()->is_error_type())
{
go_error_at(this->length_->location(), "invalid array bound");
return false;
}
Numeric_constant nc; Numeric_constant nc;
if (!this->length_->numeric_constant_value(&nc)) if (!this->length_->numeric_constant_value(&nc))
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment