]> git.kaiwu.me - njs.git/commitdiff
Webcrypto: clean up AES-CTR allocation failures
authorDmitry Volyntsev <xeioex@nginx.com>
Mon, 21 Sep 2026 23:23:09 +0000 (16:23 -0700)
committerDmitry Volyntsev <xeioexception@gmail.com>
Fri, 25 Sep 2026 23:00:29 +0000 (16:00 -0700)
external/njs_webcrypto_module.c
external/qjs_webcrypto_module.c

index cc4ef26f8414b6316e3732861eefb79618355fdb..46e3973ce058017e94d3b9892352c39af2af22ed 100644 (file)
@@ -1331,7 +1331,8 @@ njs_cipher_aes_ctr(njs_vm_t *vm, njs_str_t *data, njs_webcrypto_key_t *key,
     blocks = BN_new();
     if (njs_slow_path(blocks == NULL)) {
         njs_webcrypto_error(vm, "BN_new() failed");
-        return NJS_ERROR;
+        ret = NJS_ERROR;
+        goto fail;
     }
 
     ret = BN_set_word(blocks, njs_ceil_div(data->length, AES_BLOCK_SIZE));
@@ -1351,7 +1352,8 @@ njs_cipher_aes_ctr(njs_vm_t *vm, njs_str_t *data, njs_webcrypto_key_t *key,
     left = BN_new();
     if (njs_slow_path(left == NULL)) {
         njs_webcrypto_error(vm, "BN_new() failed");
-        return NJS_ERROR;
+        ret = NJS_ERROR;
+        goto fail;
     }
 
     ret = BN_sub(left, total, ctr);
@@ -1365,7 +1367,8 @@ njs_cipher_aes_ctr(njs_vm_t *vm, njs_str_t *data, njs_webcrypto_key_t *key,
                        data->length + EVP_MAX_BLOCK_LENGTH);
     if (njs_slow_path(dst == NULL)) {
         njs_vm_memory_error(vm);
-        return NJS_ERROR;
+        ret = NJS_ERROR;
+        goto fail;
     }
 
     ret = BN_cmp(left, blocks);
index 9a06a50f036f44e55a2c21a757e707a96a80b48f..3bc1b6a1e5b0769b59241f44aa9e5467068fa58b 100644 (file)
@@ -1111,7 +1111,8 @@ qjs_cipher_aes_ctr(JSContext *cx, njs_str_t *data, qjs_webcrypto_key_t *key,
     blocks = BN_new();
     if (blocks == NULL) {
         qjs_webcrypto_error(cx, "BN_new() failed");
-        return JS_EXCEPTION;
+        ret = JS_EXCEPTION;
+        goto fail;
     }
 
     if (BN_set_word(blocks, qjs_ceiling_div(data->length, AES_BLOCK_SIZE))
@@ -1131,7 +1132,8 @@ qjs_cipher_aes_ctr(JSContext *cx, njs_str_t *data, qjs_webcrypto_key_t *key,
     left = BN_new();
     if (left == NULL) {
         qjs_webcrypto_error(cx, "BN_new() failed");
-        return JS_EXCEPTION;
+        ret = JS_EXCEPTION;
+        goto fail;
     }
 
     if (BN_sub(left, total, ctr) != 1) {