summaryrefslogtreecommitdiff
path: root/std/node/_crypto/pbkdf2.ts
diff options
context:
space:
mode:
authorLiam Murphy <43807659+Liamolucko@users.noreply.github.com>2021-01-26 23:34:40 +1100
committerGitHub <noreply@github.com>2021-01-26 13:34:40 +0100
commit06bd692e5c4a8f66960d3919e7087530b60c20dd (patch)
tree54da22655c71341c0e1e750d5197623e4fa0e286 /std/node/_crypto/pbkdf2.ts
parentf9949a31707dcaa5a8786bfe4f84ed202be91607 (diff)
fix(std/node): Stop callbacks being called twice when callback throws error (#8867)
Diffstat (limited to 'std/node/_crypto/pbkdf2.ts')
-rw-r--r--std/node/_crypto/pbkdf2.ts34
1 files changed, 20 insertions, 14 deletions
diff --git a/std/node/_crypto/pbkdf2.ts b/std/node/_crypto/pbkdf2.ts
index 80aacdaf2..2a63802e6 100644
--- a/std/node/_crypto/pbkdf2.ts
+++ b/std/node/_crypto/pbkdf2.ts
@@ -162,19 +162,25 @@ export function pbkdf2(
iterations: number,
keylen: number,
digest: Algorithms = "sha1",
- callback: ((err?: Error, derivedKey?: Buffer) => void),
+ callback: ((err: Error | null, derivedKey?: Buffer) => void),
): void {
- try {
- const res = pbkdf2Sync(
- password,
- salt,
- iterations,
- keylen,
- digest,
- );
-
- callback(undefined, res);
- } catch (e) {
- callback(e);
- }
+ setTimeout(() => {
+ let err = null, res;
+ try {
+ res = pbkdf2Sync(
+ password,
+ salt,
+ iterations,
+ keylen,
+ digest,
+ );
+ } catch (e) {
+ err = e;
+ }
+ if (err) {
+ callback(err);
+ } else {
+ callback(null, res);
+ }
+ }, 0);
}