diff options
author | Alon Zakai <alonzakai@gmail.com> | 2017-05-03 20:57:37 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-03 20:57:37 -0700 |
commit | d0f4e932110812a35cfee9d213e9cd0ce610011a (patch) | |
tree | 2fb298cac190f7645cd4e688e5903eab29557eb1 /src | |
parent | b6526bbfeb12a793654f918d142ba07852df69af (diff) | |
download | binaryen-d0f4e932110812a35cfee9d213e9cd0ce610011a.tar.gz binaryen-d0f4e932110812a35cfee9d213e9cd0ce610011a.tar.bz2 binaryen-d0f4e932110812a35cfee9d213e9cd0ce610011a.zip |
make function name duplicate testing handle the case of just some functions being named, and colliding with others' original names (#994)
Diffstat (limited to 'src')
-rw-r--r-- | src/wasm/wasm-binary.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index 6da37cd86..a9ec63ccd 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -1597,7 +1597,6 @@ void WasmBinaryBuilder::readNames(size_t payloadLen) { if (import->kind != ExternalKind::Function) continue; importedFunctions++; } - std::set<Name> functionNames; for (size_t i = 0; i < num; i++) { auto index = getU32LEB(); if (index < importedFunctions) { @@ -1605,12 +1604,16 @@ void WasmBinaryBuilder::readNames(size_t payloadLen) { } else if (index - importedFunctions < functions.size()) { auto name = getInlineString(); functions[index - importedFunctions]->name = name; - if (functionNames.count(name) > 0) { - throw ParseException("duplicate function names"); - } - functionNames.insert(name); } } + // disallow duplicate names + std::set<Name> functionNames; + for (auto* func : functions) { + if (functionNames.count(func->name) > 0) { + throw ParseException("duplicate function name: " + std::string(func->name.str)); + } + functionNames.insert(func->name); + } if (pos != subsectionPos + subsectionSize) { throw ParseException("bad names subsection position change"); } |