From eaa0634b489168f44b88927ebeb0b3f4852615a3 Mon Sep 17 00:00:00 2001 From: subkey <2822448396@qq.com> Date: Sat, 27 Apr 2024 17:06:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=95=B0=E7=BB=84=E4=B8=8B=E6=A0=87?= =?UTF-8?q?=E8=B6=8A=E7=95=8C=E5=B0=86=E4=BC=9A=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/runtime/calc.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/runtime/calc.rs b/src/runtime/calc.rs index 6beec41..ef433d5 100644 --- a/src/runtime/calc.rs +++ b/src/runtime/calc.rs @@ -475,6 +475,8 @@ fn expr_set(mut this: Scope, left: &Expr, right: Litr) { Litr::Uint(n)=> n as u8, _=> 0 }; + }else { + panic!("数组越界: 下标{}不可大于等于数组长度{}", i, v.len()) } } _=> *get_index(CalcRef::Ref(left), i) = right @@ -582,14 +584,15 @@ fn expr_set_diff(mut this: Scope, left: &Expr, f:impl Fn(&Litr)-> Litr) { Litr::Int(n)=> (*n) as usize, _=> panic!("Buf的index必须是整数") }; - if i n as u8, - Litr::Uint(n)=> n as u8, - _=> 0 - }; + if i>=v.len() { + panic!("数组越界: 下标{}不可大于等于数组长度{}", i, v.len()) } + let ori = Litr::Uint(v[i] as usize); + v[i] = match f(&ori) { + Litr::Int(n)=> n as u8, + Litr::Uint(n)=> n as u8, + _=> 0 + }; } _=> { let mut ori = get_index(CalcRef::Ref(left), i); @@ -645,11 +648,15 @@ fn get_index(mut left:CalcRef, i:CalcRef)-> CalcRef { }; match &mut *left { Litr::Buf(v)=> { - if i>=v.len() {return CalcRef::uninit()} + if i>=v.len() { + panic!("数组越界: 下标{}不可大于等于数组长度{}", i, v.len()) + } CalcRef::Own(Litr::Uint(v[i] as usize)) } Litr::List(v)=> { - if i>=v.len() {return CalcRef::uninit()} + if i>=v.len() { + panic!("列表越界: 下标{}不可大于等于列表长度{}", i, v.len()) + } CalcRef::Ref(&mut v[i]) } Litr::Str(n)=> {