diff options
author | Thomas Lively <tlively@google.com> | 2022-11-03 10:10:01 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-03 10:10:01 -0700 |
commit | bf1782368dc6fee2d5fb9f4dd0cada2ca04ccb30 (patch) | |
tree | 34f685293dd0773bf43e832f95d88609bb3dcbdb /src/wasm/wasm-validator.cpp | |
parent | daeac1e0735452d54c8b16b51cac88165d0d4eab (diff) | |
download | binaryen-bf1782368dc6fee2d5fb9f4dd0cada2ca04ccb30.tar.gz binaryen-bf1782368dc6fee2d5fb9f4dd0cada2ca04ccb30.tar.bz2 binaryen-bf1782368dc6fee2d5fb9f4dd0cada2ca04ccb30.zip |
Fix binary parsing of data segment memory (#5208)
The binary parser was eagerly getting the name of memories to set the `memory`
field of data segments, but that meant that when the memory names were updated
later while parsing the names section, the data segment memory fields would
become out of date. Update the issue by deferring setting the `memory` fields
like we do for other parts of IR that reference memories.
Also fix a segfault in the validator that was triggered by the reproducer for
this bug before the bug was fixed.
Fixes #5204.
Diffstat (limited to 'src/wasm/wasm-validator.cpp')
-rw-r--r-- | src/wasm/wasm-validator.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/wasm/wasm-validator.cpp b/src/wasm/wasm-validator.cpp index 44ecbe9c9..cb3841197 100644 --- a/src/wasm/wasm-validator.cpp +++ b/src/wasm/wasm-validator.cpp @@ -3208,9 +3208,11 @@ static void validateDataSegments(Module& module, ValidationInfo& info) { "passive segment should not have an offset"); } else { auto memory = module.getMemoryOrNull(segment->memory); - info.shouldBeTrue(memory != nullptr, - "segment", - "active segment must have a valid memory name"); + if (!info.shouldBeTrue(memory != nullptr, + "segment", + "active segment must have a valid memory name")) { + continue; + } if (memory->is64()) { if (!info.shouldBeEqual(segment->offset->type, Type(Type::i64), |