]> git.kaiwu.me - njs.git/commitdiff
WebCrypto: fixed retval of crypto.getRandomValues().
authorDmitry Volyntsev <xeioex@nginx.com>
Fri, 28 Apr 2023 00:28:52 +0000 (17:28 -0700)
committerDmitry Volyntsev <xeioex@nginx.com>
Fri, 28 Apr 2023 00:28:52 +0000 (17:28 -0700)
Previously, crypto.getRandomValues() did not return any value,
but it has to return its buffer argument.

external/njs_webcrypto_module.c
src/test/njs_unit_test.c

index 3cabec1582ce7195b2433c9eecf7eeef2085fd1d..2c738498b60c703f185a7bcd948c26b6ab5f5675 100644 (file)
@@ -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;
 }
 
index 943049f1e48a6aa86b20d83051d352d0247de00f..e51e6441a9b72565ca1e960bcc0a789f50c9e563 100644 (file)
@@ -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") },
 };