Skip to content

Commit

Permalink
src: provide workaround for container-overflow
Browse files Browse the repository at this point in the history
PR-URL: #55591
Refs: #55584
Reviewed-By: Shelley Vohr <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: James M Snell <[email protected]>
  • Loading branch information
lemire authored and ruyadorno committed Nov 27, 2024
1 parent 89c9c46 commit 383d284
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion src/node_modules.cc
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,23 @@ const BindingData::PackageConfig* BindingData::GetPackageJSON(
if (ReadFileSync(&package_config.raw_json, path.data()) < 0) {
return nullptr;
}
// In some systems, std::string is annotated to generate an
// AddressSanitizer: container-overflow error when reading beyond the end of
// the string even when we are still within the capacity of the string.
// https://github.com/google/sanitizers/wiki/AddressSanitizerContainerOverflow
// https://github.com/nodejs/node/issues/55584
// The next lines are a workaround to avoid this false positive.
size_t json_length = package_config.raw_json.size();
package_config.raw_json.append(simdjson::SIMDJSON_PADDING, ' ');
simdjson::padded_string_view json_view(package_config.raw_json.data(),
json_length,
package_config.raw_json.size());
// End of workaround

simdjson::ondemand::document document;
simdjson::ondemand::object main_object;
simdjson::error_code error =
binding_data->json_parser.iterate(package_config.raw_json).get(document);
binding_data->json_parser.iterate(json_view).get(document);

const auto throw_invalid_package_config = [error_context, path, realm]() {
if (error_context == nullptr) {
Expand Down

0 comments on commit 383d284

Please sign in to comment.