details: http://hg.nginx.org/njs/rev/4f3424b390bd branches: changeset: 495:4f3424b390bd user: Dmitry Volyntsev <xei...@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