From d0f4e932110812a35cfee9d213e9cd0ce610011a Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Wed, 3 May 2017 20:57:37 -0700 Subject: make function name duplicate testing handle the case of just some functions being named, and colliding with others' original names (#994) --- src/wasm/wasm-binary.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src') 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 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 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"); } -- cgit v1.2.3