Skip to content

Commit 7853462

Browse files
lemireaduh95
authored andcommitted
src: provide workaround for container-overflow
PR-URL: #55591 Refs: #55584 Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 10b68ed commit 7853462

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

src/node_modules.cc

+13-1
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,23 @@ const BindingData::PackageConfig* BindingData::GetPackageJSON(
100100
if (ReadFileSync(&package_config.raw_json, path.data()) < 0) {
101101
return nullptr;
102102
}
103+
// In some systems, std::string is annotated to generate an
104+
// AddressSanitizer: container-overflow error when reading beyond the end of
105+
// the string even when we are still within the capacity of the string.
106+
// https://github.com/google/sanitizers/wiki/AddressSanitizerContainerOverflow
107+
// https://github.com/nodejs/node/issues/55584
108+
// The next lines are a workaround to avoid this false positive.
109+
size_t json_length = package_config.raw_json.size();
110+
package_config.raw_json.append(simdjson::SIMDJSON_PADDING, ' ');
111+
simdjson::padded_string_view json_view(package_config.raw_json.data(),
112+
json_length,
113+
package_config.raw_json.size());
114+
// End of workaround
103115

104116
simdjson::ondemand::document document;
105117
simdjson::ondemand::object main_object;
106118
simdjson::error_code error =
107-
binding_data->json_parser.iterate(package_config.raw_json).get(document);
119+
binding_data->json_parser.iterate(json_view).get(document);
108120

109121
const auto throw_invalid_package_config = [error_context, path, realm]() {
110122
if (error_context == nullptr) {

0 commit comments

Comments
 (0)