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];
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];
"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', '')"),
{ 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()"),