mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-07-15 16:58:34 +00:00
fix type index check
This commit is contained in:
parent
b4571805fe
commit
b6d5673582
|
@ -1905,7 +1905,7 @@ load_types(const uint8 **p_buf, const uint8 *buf_end, AOTModule *module,
|
||||||
AOTType *parent_type = module->types[parent_type_idx];
|
AOTType *parent_type = module->types[parent_type_idx];
|
||||||
/* subtyping has been checked during compilation */
|
/* subtyping has been checked during compilation */
|
||||||
bh_assert(wasm_type_is_subtype_of(
|
bh_assert(wasm_type_is_subtype_of(
|
||||||
module->types[j], parent_type, module->types, i));
|
module->types[j], parent_type, module->types, i + 1));
|
||||||
(void)parent_type;
|
(void)parent_type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -762,10 +762,16 @@ wasm_refheaptype_equal(const RefHeapType_Common *ref_heap_type1,
|
||||||
if (ref_heap_type1->heap_type != ref_heap_type2->heap_type) {
|
if (ref_heap_type1->heap_type != ref_heap_type2->heap_type) {
|
||||||
if (wasm_is_refheaptype_typeidx(ref_heap_type1)
|
if (wasm_is_refheaptype_typeidx(ref_heap_type1)
|
||||||
&& wasm_is_refheaptype_typeidx(ref_heap_type2)) {
|
&& wasm_is_refheaptype_typeidx(ref_heap_type2)) {
|
||||||
return types[ref_heap_type1->heap_type]
|
if (ref_heap_type1->heap_type == ref_heap_type2->heap_type)
|
||||||
== types[ref_heap_type2->heap_type]
|
return true;
|
||||||
? true
|
else
|
||||||
: false;
|
/* the type_count may be 0 when called from reftype_equal */
|
||||||
|
return ((uint32)ref_heap_type1->heap_type < type_count
|
||||||
|
&& (uint32)ref_heap_type2->heap_type < type_count
|
||||||
|
&& types[ref_heap_type1->heap_type]
|
||||||
|
== types[ref_heap_type2->heap_type])
|
||||||
|
? true
|
||||||
|
: false;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1012,9 +1018,12 @@ wasm_reftype_is_subtype_of(uint8 type1, const WASMRefType *ref_type1,
|
||||||
#endif
|
#endif
|
||||||
else if (type1 == REF_TYPE_HT_NULLABLE) {
|
else if (type1 == REF_TYPE_HT_NULLABLE) {
|
||||||
if (wasm_is_refheaptype_typeidx(&ref_type1->ref_ht_common)) {
|
if (wasm_is_refheaptype_typeidx(&ref_type1->ref_ht_common)) {
|
||||||
|
bh_assert((uint32)ref_type1->ref_ht_typeidx.type_idx < type_count);
|
||||||
/* reftype1 is (ref null $t) */
|
/* reftype1 is (ref null $t) */
|
||||||
if (type2 == REF_TYPE_HT_NULLABLE && ref_type2 != NULL
|
if (type2 == REF_TYPE_HT_NULLABLE && ref_type2 != NULL
|
||||||
&& wasm_is_refheaptype_typeidx(&ref_type2->ref_ht_common)) {
|
&& wasm_is_refheaptype_typeidx(&ref_type2->ref_ht_common)) {
|
||||||
|
bh_assert((uint32)ref_type2->ref_ht_typeidx.type_idx
|
||||||
|
< type_count);
|
||||||
return wasm_type_is_supers_of(
|
return wasm_type_is_supers_of(
|
||||||
types[ref_type2->ref_ht_typeidx.type_idx],
|
types[ref_type2->ref_ht_typeidx.type_idx],
|
||||||
types[ref_type1->ref_ht_typeidx.type_idx]);
|
types[ref_type1->ref_ht_typeidx.type_idx]);
|
||||||
|
@ -1059,11 +1068,14 @@ wasm_reftype_is_subtype_of(uint8 type1, const WASMRefType *ref_type1,
|
||||||
else if (type1 == REF_TYPE_HT_NON_NULLABLE) {
|
else if (type1 == REF_TYPE_HT_NON_NULLABLE) {
|
||||||
bh_assert(ref_type1);
|
bh_assert(ref_type1);
|
||||||
if (wasm_is_refheaptype_typeidx(&ref_type1->ref_ht_common)) {
|
if (wasm_is_refheaptype_typeidx(&ref_type1->ref_ht_common)) {
|
||||||
|
bh_assert((uint32)ref_type1->ref_ht_typeidx.type_idx < type_count);
|
||||||
/* reftype1 is (ref $t) */
|
/* reftype1 is (ref $t) */
|
||||||
if ((type2 == REF_TYPE_HT_NULLABLE
|
if ((type2 == REF_TYPE_HT_NULLABLE
|
||||||
|| type2 == REF_TYPE_HT_NON_NULLABLE)
|
|| type2 == REF_TYPE_HT_NON_NULLABLE)
|
||||||
&& ref_type2 != NULL
|
&& ref_type2 != NULL
|
||||||
&& wasm_is_refheaptype_typeidx(&ref_type2->ref_ht_common)) {
|
&& wasm_is_refheaptype_typeidx(&ref_type2->ref_ht_common)) {
|
||||||
|
bh_assert((uint32)ref_type2->ref_ht_typeidx.type_idx
|
||||||
|
< type_count);
|
||||||
return wasm_type_is_supers_of(
|
return wasm_type_is_supers_of(
|
||||||
types[ref_type2->ref_ht_typeidx.type_idx],
|
types[ref_type2->ref_ht_typeidx.type_idx],
|
||||||
types[ref_type1->ref_ht_typeidx.type_idx]);
|
types[ref_type1->ref_ht_typeidx.type_idx]);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user