Skip to content

Commit aa28efc

Browse files
authored
checker: fix negative cap, len checks in array init (#19694)
1 parent 1e578b1 commit aa28efc

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

vlib/v/checker/containers.v

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,12 @@ fn (mut c Checker) check_array_init_para_type(para string, mut expr ast.Expr, po
338338
if sym.kind !in [.int, .int_literal] {
339339
c.error('array ${para} needs to be an int', pos)
340340
}
341+
if expr is ast.IntegerLiteral {
342+
lit := expr as ast.IntegerLiteral
343+
if lit.val.int() < 0 {
344+
c.error('array ${para} can not be negative', lit.pos)
345+
}
346+
}
341347
}
342348

343349
fn (mut c Checker) ensure_sumtype_array_has_default_value(node ast.ArrayInit) {
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
vlib/v/checker/tests/array_init_with_len_cap_err.vv:1:16: error: array len can not be negative
2+
1 | _ = []int{len: -1}
3+
| ~~
4+
2 | _ = []int{cap: -1}
5+
vlib/v/checker/tests/array_init_with_len_cap_err.vv:2:16: error: array cap can not be negative
6+
1 | _ = []int{len: -1}
7+
2 | _ = []int{cap: -1}
8+
| ~~
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
_ = []int{len: -1}
2+
_ = []int{cap: -1}

0 commit comments

Comments
 (0)