From 7d0543c128839523e088f3ef3aeec88ee884b4e4 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Mon, 3 Sep 2012 23:15:30 +0200 Subject: [PATCH] crypto: make pbkdf2() compatible with domains --- src/node_crypto.cc | 17 ++++++++--------- test/simple/test-domain-crypto.js | 1 + 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/node_crypto.cc b/src/node_crypto.cc index dc5da802bb1..50f0b42d1fa 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -4201,7 +4201,7 @@ struct pbkdf2_req { size_t iter; char* key; size_t keylen; - Persistent callback; + Persistent obj; }; void @@ -4236,16 +4236,13 @@ EIO_PBKDF2After(uv_work_t* req) { argv[1] = Local::New(Undefined()); } - // XXX There should be an object connected to this that - // we can attach a domain onto. - MakeCallback(Context::GetCurrent()->Global(), - request->callback, - ARRAY_SIZE(argv), argv); + MakeCallback(request->obj, "ondone", ARRAY_SIZE(argv), argv); delete[] request->pass; delete[] request->salt; delete[] request->key; - request->callback.Dispose(); + request->obj.Dispose(); + request->obj.Clear(); delete request; } @@ -4267,6 +4264,7 @@ PBKDF2(const Arguments& args) { Local callback; pbkdf2_req* request = NULL; uv_work_t* req = NULL; + Persistent obj; if (args.Length() != 5) { type_error = "Bad parameter"; @@ -4324,7 +4322,8 @@ PBKDF2(const Arguments& args) { goto err; } - callback = Local::Cast(args[4]); + obj = Persistent::New(Object::New()); + obj->Set(String::New("ondone"), args[4]); request = new pbkdf2_req; request->err = 0; @@ -4335,7 +4334,7 @@ PBKDF2(const Arguments& args) { request->iter = iter; request->key = key; request->keylen = keylen; - request->callback = Persistent::New(callback); + request->obj = obj; req = new uv_work_t(); req->data = request; diff --git a/test/simple/test-domain-crypto.js b/test/simple/test-domain-crypto.js index 532a8b09d3a..66e96288044 100644 --- a/test/simple/test-domain-crypto.js +++ b/test/simple/test-domain-crypto.js @@ -34,3 +34,4 @@ crypto.randomBytes(8); crypto.randomBytes(8, function() {}); crypto.pseudoRandomBytes(8); crypto.pseudoRandomBytes(8, function() {}); +crypto.pbkdf2('password', 'salt', 8, 8, function() {});