From: Dmitry Volyntsev Date: Fri, 28 Apr 2023 00:28:52 +0000 (-0700) Subject: WebCrypto: fixed retval of crypto.getRandomValues(). X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/static/gitweb.js?a=commitdiff_plain;h=ac79c7fdf8685ecec8f7a8ba08944d690e905acc;p=njs.git WebCrypto: fixed retval of crypto.getRandomValues(). Previously, crypto.getRandomValues() did not return any value, but it has to return its buffer argument. --- diff --git a/external/njs_webcrypto_module.c b/external/njs_webcrypto_module.c index 3cabec15..2c738498 100644 --- a/external/njs_webcrypto_module.c +++ b/external/njs_webcrypto_module.c @@ -4034,10 +4034,13 @@ static njs_int_t njs_ext_get_random_values(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t unused, njs_value_t *retval) { - njs_int_t ret; - njs_str_t fill; + njs_int_t ret; + njs_str_t fill; + njs_value_t *buffer; - ret = njs_vm_value_to_bytes(vm, &fill, njs_arg(args, nargs, 1)); + buffer = njs_arg(args, nargs, 1); + + ret = njs_vm_value_to_bytes(vm, &fill, buffer); if (njs_slow_path(ret != NJS_OK)) { return NJS_ERROR; } @@ -4052,6 +4055,8 @@ njs_ext_get_random_values(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, return NJS_ERROR; } + njs_value_assign(retval, buffer); + return NJS_OK; } diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 943049f1..e51e6441 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -21923,6 +21923,10 @@ static njs_unit_test_t njs_webcrypto_test[] = "let condition = bits1 > (mean - 10 * stddev) && bits1 < (mean + 10 * stddev);" "condition ? true : [buf, nbits, bits1, mean, stddev]"), njs_str("true") }, + + { njs_str("let buf = new Uint32Array(4);" + "buf === crypto.getRandomValues(buf)"), + njs_str("true") }, };