From ac79c7fdf8685ecec8f7a8ba08944d690e905acc Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Thu, 27 Apr 2023 17:28:52 -0700 Subject: [PATCH] WebCrypto: fixed retval of crypto.getRandomValues(). Previously, crypto.getRandomValues() did not return any value, but it has to return its buffer argument. --- external/njs_webcrypto_module.c | 11 ++++++++--- src/test/njs_unit_test.c | 4 ++++ 2 files changed, 12 insertions(+), 3 deletions(-) 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") }, }; -- 2.47.3