Welcome! Log In Create A New Profile

Advanced

[njs] Fixed crypto update() method after digest() is called.

Dmitry Volyntsev
April 05, 2018 12:44PM
details: http://hg.nginx.org/njs/rev/4f3424b390bd
branches:
changeset: 495:4f3424b390bd
user: Dmitry Volyntsev <xeioex@nginx.com>
date: Thu Apr 05 19:06:35 2018 +0300
description:
Fixed crypto update() method after digest() is called.

diffstat:

njs/njs_crypto.c | 12 ++++++++++++
njs/test/njs_unit_test.c | 12 ++++++++++++
2 files changed, 24 insertions(+), 0 deletions(-)

diffs (58 lines):

diff -r 9d5914cc9100 -r 4f3424b390bd njs/njs_crypto.c
--- a/njs/njs_crypto.c Thu Apr 05 14:50:45 2018 +0300
+++ b/njs/njs_crypto.c Thu Apr 05 19:06:35 2018 +0300
@@ -243,6 +243,12 @@ njs_hash_prototype_update(njs_vm_t *vm,
njs_string_get(&args[1], &data);

dgst = njs_value_data(&hash->value);
+
+ if (nxt_slow_path(dgst->alg == NULL)) {
+ njs_error(vm, "Digest already called", NULL);
+ return NJS_ERROR;
+ }
+
dgst->alg->update(&dgst->u, data.start, data.length);

vm->retval = args[0];
@@ -504,6 +510,12 @@ njs_hmac_prototype_update(njs_vm_t *vm,
njs_string_get(&args[1], &data);

ctx = njs_value_data(&hmac->value);
+
+ if (nxt_slow_path(ctx->alg == NULL)) {
+ njs_error(vm, "Digest already called", NULL);
+ return NJS_ERROR;
+ }
+
ctx->alg->update(&ctx->u, data.start, data.length);

vm->retval = args[0];
diff -r 9d5914cc9100 -r 4f3424b390bd njs/test/njs_unit_test.c
--- a/njs/test/njs_unit_test.c Thu Apr 05 14:50:45 2018 +0300
+++ b/njs/test/njs_unit_test.c Thu Apr 05 19:06:35 2018 +0300
@@ -9142,6 +9142,10 @@ static njs_unit_test_t njs_test[] =
"h.update('A').digest('hex'); h.digest('hex')"),
nxt_string("Error: Digest already called") },

+ { nxt_string("var h = require('crypto').createHash('sha1');"
+ "h.update('A').digest('hex'); h.update('B')"),
+ nxt_string("Error: Digest already called") },
+
/* require('crypto').createHash() */

{ nxt_string("require('crypto').createHmac('sha1', '')"),
@@ -9239,6 +9243,14 @@ static njs_unit_test_t njs_test[] =
{ nxt_string("var h = require('crypto').createHmac('sha1', [])"),
nxt_string("TypeError: key must be a string") },

+ { nxt_string("var h = require('crypto').createHmac('sha1', 'secret key');"
+ "h.update('A').digest('hex'); h.digest('hex')"),
+ nxt_string("Error: Digest already called") },
+
+ { nxt_string("var h = require('crypto').createHmac('sha1', 'secret key');"
+ "h.update('A').digest('hex'); h.update('B')"),
+ nxt_string("Error: Digest already called") },
+
/* setTimeout(). */

{ nxt_string("setTimeout()"),
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Fixed crypto update() method after digest() is called.

Dmitry Volyntsev 409 April 05, 2018 12:44PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 189
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready