in plugins/experimental/wasm/lib/src/bytecode_util.cc [197:245]
bool BytecodeUtil::getStrippedSource(std::string_view bytecode, std::string &ret) {
// Check Wasm header.
if (!checkWasmHeader(bytecode)) {
return false;
}
// Skip the Wasm header.
const char *pos = bytecode.data() + 8;
const char *end = bytecode.data() + bytecode.size();
while (pos < end) {
const auto *const section_start = pos;
if (pos + 1 > end) {
return false;
}
const auto section_type = *pos++;
uint32_t section_len = 0;
if (!parseVarint(pos, end, section_len) || pos + section_len > end) {
return false;
}
if (section_type == 0 /* custom section */) {
const auto *const section_data_start = pos;
uint32_t section_name_len = 0;
if (!parseVarint(pos, end, section_name_len) || pos + section_name_len > end) {
return false;
}
auto section_name = std::string_view(pos, section_name_len);
if (section_name.find("precompiled_") != std::string::npos) {
// If this is the first "precompiled_" section, then save everything
// before it, otherwise skip it.
if (ret.empty()) {
const char *start = bytecode.data();
ret.append(start, section_start);
}
}
pos = section_data_start + section_len;
} else {
pos += section_len;
// Save this section if we already saw a custom "precompiled_" section.
if (!ret.empty()) {
ret.append(section_start, pos);
}
}
}
if (ret.empty()) {
// Copy the original source code if it is empty.
ret = std::string(bytecode);
}
return true;
}