fix overflow
This commit is contained in:
parent
ac2556a7ad
commit
dc541497b2
|
@ -946,7 +946,7 @@ pub fn const_eval(
|
||||||
(Operator::Unreachable, []) => None,
|
(Operator::Unreachable, []) => None,
|
||||||
|
|
||||||
(Operator::I32Load { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
(Operator::I32Load { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -956,7 +956,7 @@ pub fn const_eval(
|
||||||
)))
|
)))
|
||||||
}),
|
}),
|
||||||
(Operator::I64Load { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
(Operator::I64Load { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(8)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(8)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -966,7 +966,7 @@ pub fn const_eval(
|
||||||
)))
|
)))
|
||||||
}),
|
}),
|
||||||
(Operator::F32Load { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
(Operator::F32Load { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -976,7 +976,7 @@ pub fn const_eval(
|
||||||
)))
|
)))
|
||||||
}),
|
}),
|
||||||
(Operator::F64Load { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
(Operator::F64Load { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(8)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(8)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -986,7 +986,7 @@ pub fn const_eval(
|
||||||
)))
|
)))
|
||||||
}),
|
}),
|
||||||
(Operator::I32Load8S { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
(Operator::I32Load8S { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(1)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(1)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -995,7 +995,7 @@ pub fn const_eval(
|
||||||
))
|
))
|
||||||
}),
|
}),
|
||||||
(Operator::I32Load8U { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
(Operator::I32Load8U { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1004,7 +1004,7 @@ pub fn const_eval(
|
||||||
))
|
))
|
||||||
}),
|
}),
|
||||||
(Operator::I32Load16S { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
(Operator::I32Load16S { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(2)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(2)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1013,7 +1013,7 @@ pub fn const_eval(
|
||||||
))
|
))
|
||||||
}),
|
}),
|
||||||
(Operator::I32Load16U { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
(Operator::I32Load16U { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(2)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(2)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1022,7 +1022,7 @@ pub fn const_eval(
|
||||||
))
|
))
|
||||||
}),
|
}),
|
||||||
(Operator::I64Load8S { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
(Operator::I64Load8S { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(1)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(1)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1031,7 +1031,7 @@ pub fn const_eval(
|
||||||
))
|
))
|
||||||
}),
|
}),
|
||||||
(Operator::I64Load8U { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
(Operator::I64Load8U { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(1)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(1)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1040,7 +1040,7 @@ pub fn const_eval(
|
||||||
))
|
))
|
||||||
}),
|
}),
|
||||||
(Operator::I64Load16S { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
(Operator::I64Load16S { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(2)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(2)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1049,7 +1049,7 @@ pub fn const_eval(
|
||||||
))
|
))
|
||||||
}),
|
}),
|
||||||
(Operator::I64Load16U { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
(Operator::I64Load16U { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(2)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(2)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1058,7 +1058,7 @@ pub fn const_eval(
|
||||||
))
|
))
|
||||||
}),
|
}),
|
||||||
(Operator::I64Load32S { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
(Operator::I64Load32S { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1067,7 +1067,7 @@ pub fn const_eval(
|
||||||
))
|
))
|
||||||
}),
|
}),
|
||||||
(Operator::I64Load32U { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
(Operator::I64Load32U { memory }, [ConstVal::I32(addr)]) => ctx.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1077,7 +1077,7 @@ pub fn const_eval(
|
||||||
}),
|
}),
|
||||||
(Operator::I32Store { memory }, [ConstVal::I32(addr), ConstVal::I32(data)]) => ctx
|
(Operator::I32Store { memory }, [ConstVal::I32(addr), ConstVal::I32(data)]) => ctx
|
||||||
.and_then(|global| {
|
.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1086,7 +1086,7 @@ pub fn const_eval(
|
||||||
}),
|
}),
|
||||||
(Operator::I64Store { memory }, [ConstVal::I32(addr), ConstVal::I64(data)]) => ctx
|
(Operator::I64Store { memory }, [ConstVal::I32(addr), ConstVal::I64(data)]) => ctx
|
||||||
.and_then(|global| {
|
.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(8)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(8)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1095,7 +1095,7 @@ pub fn const_eval(
|
||||||
}),
|
}),
|
||||||
(Operator::I32Store8 { memory }, [ConstVal::I32(addr), ConstVal::I32(data)]) => ctx
|
(Operator::I32Store8 { memory }, [ConstVal::I32(addr), ConstVal::I32(data)]) => ctx
|
||||||
.and_then(|global| {
|
.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(1)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(1)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1104,7 +1104,7 @@ pub fn const_eval(
|
||||||
}),
|
}),
|
||||||
(Operator::I32Store16 { memory }, [ConstVal::I32(addr), ConstVal::I32(data)]) => ctx
|
(Operator::I32Store16 { memory }, [ConstVal::I32(addr), ConstVal::I32(data)]) => ctx
|
||||||
.and_then(|global| {
|
.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(2)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(2)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1113,7 +1113,7 @@ pub fn const_eval(
|
||||||
}),
|
}),
|
||||||
(Operator::I64Store8 { memory }, [ConstVal::I32(addr), ConstVal::I64(data)]) => ctx
|
(Operator::I64Store8 { memory }, [ConstVal::I32(addr), ConstVal::I64(data)]) => ctx
|
||||||
.and_then(|global| {
|
.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(1)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(1)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1122,7 +1122,7 @@ pub fn const_eval(
|
||||||
}),
|
}),
|
||||||
(Operator::I64Store16 { memory }, [ConstVal::I32(addr), ConstVal::I64(data)]) => ctx
|
(Operator::I64Store16 { memory }, [ConstVal::I32(addr), ConstVal::I64(data)]) => ctx
|
||||||
.and_then(|global| {
|
.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(2)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(2)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1131,7 +1131,7 @@ pub fn const_eval(
|
||||||
}),
|
}),
|
||||||
(Operator::I64Store32 { memory }, [ConstVal::I32(addr), ConstVal::I64(data)]) => ctx
|
(Operator::I64Store32 { memory }, [ConstVal::I32(addr), ConstVal::I64(data)]) => ctx
|
||||||
.and_then(|global| {
|
.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1140,7 +1140,7 @@ pub fn const_eval(
|
||||||
}),
|
}),
|
||||||
(Operator::F32Store { memory }, [ConstVal::I32(addr), ConstVal::F32(data)]) => ctx
|
(Operator::F32Store { memory }, [ConstVal::I32(addr), ConstVal::F32(data)]) => ctx
|
||||||
.and_then(|global| {
|
.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(4)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -1149,7 +1149,7 @@ pub fn const_eval(
|
||||||
}),
|
}),
|
||||||
(Operator::F64Store { memory }, [ConstVal::I32(addr), ConstVal::F64(data)]) => ctx
|
(Operator::F64Store { memory }, [ConstVal::I32(addr), ConstVal::F64(data)]) => ctx
|
||||||
.and_then(|global| {
|
.and_then(|global| {
|
||||||
let addr = *addr + memory.offset;
|
let addr = addr.checked_add(memory.offset)?;
|
||||||
if addr.checked_add(8)? > global.memories[memory.memory].data.len() as u32 {
|
if addr.checked_add(8)? > global.memories[memory.memory].data.len() as u32 {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue