mirror of
https://github.com/nodejs/node.git
synced 2026-10-28 18:25:13 +08:00
`node_napi_env__::New()` returns nullptr after throwing when an add-on declares a Node-API version this binary does not support, but `napi_module_register_by_symbol()` dereferenced the result without checking it. Loading such an add-on segfaulted instead of surfacing the error the version check had already produced, so `require()` could not catch it. Reproduced on v20.x, v22.x, v24.x and v26.8.2 with a ten-line add-on whose only distinguishing content is a NAPI_VERSION above NODE_API_SUPPORTED_VERSION_MAX. `main`, `v22.x-staging` and `v24.x-staging` all lack the check. The error path had no test coverage: the message text appears in exactly one file in the repository, `src/node_api.cc`. A test is added next to `test_null_init`, which covers the sibling early return in the same function. Prepared with assistance from a closed-source coding agent, named in the pull request description. The design, review and validation are my own: I verified the fix and the test against a local build, including removing the four added lines and relinking to confirm the test fails without them. Refs: https://github.com/nodejs/node/issues/57233 Signed-off-by: Alexey Karimov <krassx@gmail.com> PR-URL: https://github.com/nodejs/node/pull/66019 Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
13 lines
411 B
Python
13 lines
411 B
Python
{
|
|
'targets': [
|
|
{
|
|
'target_name': 'test_module_version_mismatch',
|
|
'sources': [ 'test_module_version_mismatch.c' ],
|
|
# One below NAPI_VERSION_EXPERIMENTAL, so it is always above
|
|
# NODE_API_SUPPORTED_VERSION_MAX and never becomes a real version, but is
|
|
# not the experimental value the version check deliberately allows.
|
|
'defines': [ 'NAPI_VERSION=2147483646' ]
|
|
}
|
|
]
|
|
}
|