summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2017-05-03 20:57:37 -0700
committerGitHub <noreply@github.com>2017-05-03 20:57:37 -0700
commitd0f4e932110812a35cfee9d213e9cd0ce610011a (patch)
tree2fb298cac190f7645cd4e688e5903eab29557eb1 /src
parentb6526bbfeb12a793654f918d142ba07852df69af (diff)
downloadbinaryen-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.cpp13
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");
}