summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-binary.cpp
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2021-10-13 11:44:03 -0700
committerGitHub <noreply@github.com>2021-10-13 11:44:03 -0700
commit31af332f2a1627ae2bd9232baf5837366a481cfe (patch)
treea5445f2e697034bc2a211b0fe19bf2317fefe107 /src/wasm/wasm-binary.cpp
parentcd4e0e8ca447158dcc7c7f95cac2adcc43f99094 (diff)
downloadbinaryen-31af332f2a1627ae2bd9232baf5837366a481cfe.tar.gz
binaryen-31af332f2a1627ae2bd9232baf5837366a481cfe.tar.bz2
binaryen-31af332f2a1627ae2bd9232baf5837366a481cfe.zip
Minor fixes in binary type name emitting (#4239)
Add an assert on not emitting a null name (which would cause a crash a few lines down on trying to read its bytes). I hit that when writing a buggy pass that updated field names. Also fix the case of a type not having a name but some of its fields having names. We can't test that atm since our text format requires types to have names anyhow, so this is a fix for a possible future where we do allow parsing non-named types.
Diffstat (limited to 'src/wasm/wasm-binary.cpp')
-rw-r--r--src/wasm/wasm-binary.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index 9aa18f270..70bc738f6 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -770,7 +770,7 @@ void WasmBinaryWriter::writeNames() {
std::vector<HeapType> namedTypes;
for (auto& kv : typeIndices) {
auto type = kv.first;
- if (wasm->typeNames.count(type)) {
+ if (wasm->typeNames.count(type) && wasm->typeNames[type].name.is()) {
namedTypes.push_back(type);
}
}
@@ -906,7 +906,7 @@ void WasmBinaryWriter::writeNames() {
std::vector<HeapType> relevantTypes;
for (auto& type : types) {
if (type.isStruct() && wasm->typeNames.count(type) &&
- !wasm->typeNames.at(type).fieldNames.empty()) {
+ !wasm->typeNames[type].fieldNames.empty()) {
relevantTypes.push_back(type);
}
}
@@ -1194,6 +1194,7 @@ static int decodeHexNibble(char ch) {
}
void WasmBinaryWriter::writeEscapedName(const char* name) {
+ assert(name);
if (!strpbrk(name, "\\")) {
writeInlineString(name);
return;