- Version: v11.11.0
- Platform: all platforms
- Subsystem: napi
A subtle change of behavior in napi_get_buffer_info() was introduced in v11.11.0.
For v11.10.0 and earlier, the following napi addon's assertions passed, even when the argv buffer value being retrieved was 0 bytes in length.
Since v11.11.0, however, the assert(*buffer != NULL); assertion below fails when the argv buffer value is 0 bytes in length.
This may not be a deal-breaker, and perhaps we need to update our assertions, but I first wanted to get to the bottom of why exactly this is happening, and why this changed in v11.11.0.
// converts a napi_value buffer argument to an unsigned char* buffer:
static int arg_buf(
napi_env env,
napi_value value,
unsigned char** buffer,
int* length,
const char* error
) {
assert(*buffer == NULL);
assert(*length == 0);
bool is_buffer;
OK(napi_is_buffer(env, value, &is_buffer));
if (!is_buffer) {
napi_throw_error(env, NULL, error);
return 0;
}
size_t size = 0;
assert(napi_get_buffer_info(env, value, (void**) buffer, &size) == napi_ok);
assert(*buffer != NULL);
if (size > INT_MAX) {
napi_throw_error(env, NULL, E_BUFFER_LENGTH);
return 0;
}
*length = (int) size;
assert(*length >= 0);
return 1;
}
@addaleax, I know you did some recent work in #26301, could that have anything to do with this?