fix: guard against local variable array overflow in for-loop hidden variables
Add bounds check in forStatement to ensure compiler->numLocals + 2 does not exceed MAX_LOCALS before calling addLocal for the hidden 'seq ' and iterator variables. Includes regression test with deeply nested for-loops that previously caused an array overflow.
This commit is contained in:
@@ -0,0 +1,178 @@
|
||||
// This test caused an array oveflow in local variable array due to hidden
|
||||
// variables of for loop
|
||||
|
||||
// expect error line 91
|
||||
var z = []
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
for (x in z) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user