@ -19,6 +19,7 @@
# include "CNNICHashWhitelist.inc"
# include <errno.h>
# include <limits.h> // INT_MAX
# include <math.h>
# include <stdlib.h>
# include <string.h>
@ -4737,12 +4738,12 @@ class PBKDF2Request : public AsyncWrap {
PBKDF2Request ( Environment * env ,
Local < Object > object ,
const EVP_MD * digest ,
ssize_ t passlen ,
in t passlen ,
char * pass ,
ssize_ t saltlen ,
in t saltlen ,
char * salt ,
ssize_ t iter ,
ssize_ t keylen )
in t iter ,
in t keylen )
: AsyncWrap ( env , object , AsyncWrap : : PROVIDER_CRYPTO ) ,
digest_ ( digest ) ,
error_ ( 0 ) ,
@ -4771,7 +4772,7 @@ class PBKDF2Request : public AsyncWrap {
return digest_ ;
}
inline ssize_ t passlen ( ) const {
inline in t passlen ( ) const {
return passlen_ ;
}
@ -4779,7 +4780,7 @@ class PBKDF2Request : public AsyncWrap {
return pass_ ;
}
inline ssize_ t saltlen ( ) const {
inline in t saltlen ( ) const {
return saltlen_ ;
}
@ -4787,7 +4788,7 @@ class PBKDF2Request : public AsyncWrap {
return salt_ ;
}
inline ssize_ t keylen ( ) const {
inline in t keylen ( ) const {
return keylen_ ;
}
@ -4795,7 +4796,7 @@ class PBKDF2Request : public AsyncWrap {
return key_ ;
}
inline ssize_ t iter ( ) const {
inline in t iter ( ) const {
return iter_ ;
}
@ -4828,13 +4829,13 @@ class PBKDF2Request : public AsyncWrap {
private :
const EVP_MD * digest_ ;
int error_ ;
ssize_ t passlen_ ;
in t passlen_ ;
char * pass_ ;
ssize_ t saltlen_ ;
in t saltlen_ ;
char * salt_ ;
ssize_ t keylen_ ;
in t keylen_ ;
char * key_ ;
ssize_ t iter_ ;
in t iter_ ;
} ;
@ -4891,10 +4892,11 @@ void PBKDF2(const FunctionCallbackInfo<Value>& args) {
const char * type_error = nullptr ;
char * pass = nullptr ;
char * salt = nullptr ;
ssize_t passlen = - 1 ;
ssize_t saltlen = - 1 ;
double keylen = - 1 ;
ssize_t iter = - 1 ;
int passlen = - 1 ;
int saltlen = - 1 ;
double raw_keylen = - 1 ;
int keylen = - 1 ;
int iter = - 1 ;
PBKDF2Request * req = nullptr ;
Local < Object > obj ;
@ -4946,12 +4948,15 @@ void PBKDF2(const FunctionCallbackInfo<Value>& args) {
goto err ;
}
keylen = args [ 3 ] - > NumberValue ( ) ;
if ( keylen < 0 | | isnan ( keylen ) | | isinf ( keylen ) ) {
raw_keylen = args [ 3 ] - > NumberValue ( ) ;
if ( raw_keylen < 0.0 | | isnan ( raw_keylen ) | | isinf ( raw_keylen ) | |
raw_keylen > INT_MAX ) {
type_error = " Bad key length " ;
goto err ;
}
keylen = static_cast < int > ( raw_keylen ) ;
if ( args [ 4 ] - > IsString ( ) ) {
node : : Utf8Value digest_name ( env - > isolate ( ) , args [ 4 ] ) ;
digest = EVP_get_digestbyname ( * digest_name ) ;
@ -4974,7 +4979,7 @@ void PBKDF2(const FunctionCallbackInfo<Value>& args) {
saltlen ,
salt ,
iter ,
static_cast < ssize_t > ( keylen ) ) ;
keylen ) ;
if ( args [ 5 ] - > IsFunction ( ) ) {
obj - > Set ( env - > ondone_string ( ) , args [ 5 ] ) ;