mirror of
https://github.com/mii443/wasmer.git
synced 2025-12-16 17:18:57 +00:00
Fix type of OOB reported on call indirect index outside table.
This commit is contained in:
@@ -2501,7 +2501,7 @@ impl<'ctx, 'a> LLVMFunctionCodeGenerator<'ctx, 'a> {
|
|||||||
builder.position_at_end(not_in_bounds_block);
|
builder.position_at_end(not_in_bounds_block);
|
||||||
builder.build_call(
|
builder.build_call(
|
||||||
intrinsics.throw_trap,
|
intrinsics.throw_trap,
|
||||||
&[intrinsics.trap_call_indirect_oob],
|
&[intrinsics.trap_table_access_oob],
|
||||||
"throw",
|
"throw",
|
||||||
);
|
);
|
||||||
builder.build_unreachable();
|
builder.build_unreachable();
|
||||||
@@ -2553,7 +2553,8 @@ impl<'ctx, 'a> LLVMFunctionCodeGenerator<'ctx, 'a> {
|
|||||||
|
|
||||||
let pushed_args = self.state.popn_save_extra(func_type.params().len())?;
|
let pushed_args = self.state.popn_save_extra(func_type.params().len())?;
|
||||||
|
|
||||||
let args: Vec<_> = std::iter::repeat(ctx_ptr).take(2)
|
let args: Vec<_> = std::iter::repeat(ctx_ptr)
|
||||||
|
.take(2)
|
||||||
.chain(pushed_args.into_iter().enumerate().map(|(i, (v, info))| {
|
.chain(pushed_args.into_iter().enumerate().map(|(i, (v, info))| {
|
||||||
match func_type.params()[i] {
|
match func_type.params()[i] {
|
||||||
Type::F32 => builder.build_bitcast(
|
Type::F32 => builder.build_bitcast(
|
||||||
|
|||||||
@@ -144,10 +144,10 @@ pub struct Intrinsics<'ctx> {
|
|||||||
|
|
||||||
pub trap_unreachable: BasicValueEnum<'ctx>,
|
pub trap_unreachable: BasicValueEnum<'ctx>,
|
||||||
pub trap_call_indirect_sig: BasicValueEnum<'ctx>,
|
pub trap_call_indirect_sig: BasicValueEnum<'ctx>,
|
||||||
pub trap_call_indirect_oob: BasicValueEnum<'ctx>,
|
|
||||||
pub trap_memory_oob: BasicValueEnum<'ctx>,
|
pub trap_memory_oob: BasicValueEnum<'ctx>,
|
||||||
pub trap_illegal_arithmetic: BasicValueEnum<'ctx>,
|
pub trap_illegal_arithmetic: BasicValueEnum<'ctx>,
|
||||||
pub trap_misaligned_atomic: BasicValueEnum<'ctx>,
|
pub trap_misaligned_atomic: BasicValueEnum<'ctx>,
|
||||||
|
pub trap_table_access_oob: BasicValueEnum<'ctx>,
|
||||||
|
|
||||||
// VM intrinsics.
|
// VM intrinsics.
|
||||||
pub memory_grow_dynamic_local: FunctionValue<'ctx>,
|
pub memory_grow_dynamic_local: FunctionValue<'ctx>,
|
||||||
@@ -482,9 +482,6 @@ impl<'ctx> Intrinsics<'ctx> {
|
|||||||
trap_call_indirect_sig: i32_ty
|
trap_call_indirect_sig: i32_ty
|
||||||
.const_int(TrapCode::BadSignature as _, false)
|
.const_int(TrapCode::BadSignature as _, false)
|
||||||
.as_basic_value_enum(),
|
.as_basic_value_enum(),
|
||||||
trap_call_indirect_oob: i32_ty
|
|
||||||
.const_int(TrapCode::OutOfBounds as _, false)
|
|
||||||
.as_basic_value_enum(),
|
|
||||||
trap_memory_oob: i32_ty
|
trap_memory_oob: i32_ty
|
||||||
.const_int(TrapCode::OutOfBounds as _, false)
|
.const_int(TrapCode::OutOfBounds as _, false)
|
||||||
.as_basic_value_enum(),
|
.as_basic_value_enum(),
|
||||||
@@ -496,6 +493,9 @@ impl<'ctx> Intrinsics<'ctx> {
|
|||||||
trap_misaligned_atomic: i32_ty
|
trap_misaligned_atomic: i32_ty
|
||||||
.const_int(TrapCode::Interrupt as _, false)
|
.const_int(TrapCode::Interrupt as _, false)
|
||||||
.as_basic_value_enum(),
|
.as_basic_value_enum(),
|
||||||
|
trap_table_access_oob: i32_ty
|
||||||
|
.const_int(TrapCode::TableAccessOutOfBounds as _, false)
|
||||||
|
.as_basic_value_enum(),
|
||||||
|
|
||||||
// VM intrinsics.
|
// VM intrinsics.
|
||||||
memory_grow_dynamic_local: module.add_function(
|
memory_grow_dynamic_local: module.add_function(
|
||||||
|
|||||||
Reference in New Issue
Block a user