21
21
22
22
#include " node.h"
23
23
#include " node_buffer.h"
24
+ #include " node_errors.h"
24
25
#include " node_constants.h"
25
26
#include " node_crypto.h"
26
27
#include " node_crypto_bio.h"
45
46
#include < memory>
46
47
#include < vector>
47
48
48
- #define THROW_AND_RETURN_IF_NOT_BUFFER (val, prefix ) \
49
- do { \
50
- if (!Buffer::HasInstance (val)) { \
51
- return env->ThrowTypeError (prefix " must be a buffer" ); \
52
- } \
53
- } while (0 )
54
-
55
- #define THROW_AND_RETURN_IF_NOT_STRING (val, prefix ) \
56
- do { \
57
- if (!val->IsString ()) { \
58
- return env->ThrowTypeError (prefix " must be a string" ); \
59
- } \
60
- } while (0 )
61
-
62
49
static const char PUBLIC_KEY_PFX[] = " -----BEGIN PUBLIC KEY-----" ;
63
50
static const int PUBLIC_KEY_PFX_LEN = sizeof (PUBLIC_KEY_PFX) - 1 ;
64
51
static const char PUBRSA_KEY_PFX[] = " -----BEGIN RSA PUBLIC KEY-----" ;
@@ -518,7 +505,7 @@ void SecureContext::SetKey(const FunctionCallbackInfo<Value>& args) {
518
505
if (args[1 ]->IsUndefined () || args[1 ]->IsNull ())
519
506
len = 1 ;
520
507
else
521
- THROW_AND_RETURN_IF_NOT_STRING (args[1 ], " Pass phrase" );
508
+ THROW_AND_RETURN_IF_NOT_STRING (env, args[1 ], " Pass phrase" );
522
509
}
523
510
524
511
BIO *bio = LoadBIO (env, args[0 ]);
@@ -916,7 +903,7 @@ void SecureContext::SetCiphers(const FunctionCallbackInfo<Value>& args) {
916
903
return env->ThrowTypeError (" Ciphers argument is mandatory" );
917
904
}
918
905
919
- THROW_AND_RETURN_IF_NOT_STRING (args[0 ], " Ciphers" );
906
+ THROW_AND_RETURN_IF_NOT_STRING (env, args[0 ], " Ciphers" );
920
907
921
908
const node::Utf8Value ciphers (args.GetIsolate (), args[0 ]);
922
909
SSL_CTX_set_cipher_list (sc->ctx_ , *ciphers);
@@ -931,7 +918,7 @@ void SecureContext::SetECDHCurve(const FunctionCallbackInfo<Value>& args) {
931
918
if (args.Length () != 1 )
932
919
return env->ThrowTypeError (" ECDH curve name argument is mandatory" );
933
920
934
- THROW_AND_RETURN_IF_NOT_STRING (args[0 ], " ECDH curve name" );
921
+ THROW_AND_RETURN_IF_NOT_STRING (env, args[0 ], " ECDH curve name" );
935
922
936
923
node::Utf8Value curve (env->isolate (), args[0 ]);
937
924
@@ -989,7 +976,8 @@ void SecureContext::SetOptions(const FunctionCallbackInfo<Value>& args) {
989
976
ASSIGN_OR_RETURN_UNWRAP (&sc, args.Holder ());
990
977
991
978
if (args.Length () != 1 || !args[0 ]->IntegerValue ()) {
992
- return sc->env ()->ThrowTypeError (" Options must be an integer value" );
979
+ return THROW_ERR_INVALID_ARG_TYPE (
980
+ sc->env (), " Options must be an integer value" );
993
981
}
994
982
995
983
SSL_CTX_set_options (
@@ -1008,7 +996,7 @@ void SecureContext::SetSessionIdContext(
1008
996
return env->ThrowTypeError (" Session ID context argument is mandatory" );
1009
997
}
1010
998
1011
- THROW_AND_RETURN_IF_NOT_STRING (args[0 ], " Session ID context" );
999
+ THROW_AND_RETURN_IF_NOT_STRING (env, args[0 ], " Session ID context" );
1012
1000
1013
1001
const node::Utf8Value sessionIdContext (args.GetIsolate (), args[0 ]);
1014
1002
const unsigned char * sid_ctx =
@@ -1043,8 +1031,8 @@ void SecureContext::SetSessionTimeout(const FunctionCallbackInfo<Value>& args) {
1043
1031
ASSIGN_OR_RETURN_UNWRAP (&sc, args.Holder ());
1044
1032
1045
1033
if (args.Length () != 1 || !args[0 ]->IsInt32 ()) {
1046
- return sc-> env ()-> ThrowTypeError (
1047
- " Session timeout must be a 32-bit integer" );
1034
+ return THROW_ERR_INVALID_ARG_TYPE (
1035
+ sc-> env (), " Session timeout must be a 32-bit integer" );
1048
1036
}
1049
1037
1050
1038
int32_t sessionTimeout = args[0 ]->Int32Value ();
@@ -1085,7 +1073,7 @@ void SecureContext::LoadPKCS12(const FunctionCallbackInfo<Value>& args) {
1085
1073
}
1086
1074
1087
1075
if (args.Length () >= 2 ) {
1088
- THROW_AND_RETURN_IF_NOT_BUFFER (args[1 ], " Pass phrase" );
1076
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[1 ], " Pass phrase" );
1089
1077
size_t passlen = Buffer::Length (args[1 ]);
1090
1078
pass = new char [passlen + 1 ];
1091
1079
memcpy (pass, Buffer::Data (args[1 ]), passlen);
@@ -1212,7 +1200,7 @@ void SecureContext::SetTicketKeys(const FunctionCallbackInfo<Value>& args) {
1212
1200
return env->ThrowTypeError (" Ticket keys argument is mandatory" );
1213
1201
}
1214
1202
1215
- THROW_AND_RETURN_IF_NOT_BUFFER (args[0 ], " Ticket keys" );
1203
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[0 ], " Ticket keys" );
1216
1204
1217
1205
if (Buffer::Length (args[0 ]) != 48 ) {
1218
1206
return env->ThrowTypeError (" Ticket keys length must be 48 bytes" );
@@ -1964,7 +1952,7 @@ void SSLWrap<Base>::SetSession(const FunctionCallbackInfo<Value>& args) {
1964
1952
return env->ThrowError (" Session argument is mandatory" );
1965
1953
}
1966
1954
1967
- THROW_AND_RETURN_IF_NOT_BUFFER (args[0 ], " Session" );
1955
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[0 ], " Session" );
1968
1956
size_t slen = Buffer::Length (args[0 ]);
1969
1957
char * sbuf = new char [slen];
1970
1958
memcpy (sbuf, Buffer::Data (args[0 ]), slen);
@@ -2088,7 +2076,7 @@ void SSLWrap<Base>::SetOCSPResponse(
2088
2076
if (args.Length () < 1 )
2089
2077
return env->ThrowTypeError (" OCSP response argument is mandatory" );
2090
2078
2091
- THROW_AND_RETURN_IF_NOT_BUFFER (args[0 ], " OCSP response" );
2079
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[0 ], " OCSP response" );
2092
2080
2093
2081
w->ocsp_response_ .Reset (args.GetIsolate (), args[0 ].As <Object>());
2094
2082
#endif // NODE__HAVE_TLSEXT_STATUS_CB
@@ -3937,11 +3925,11 @@ template <PublicKeyCipher::Operation operation,
3937
3925
void PublicKeyCipher::Cipher (const FunctionCallbackInfo<Value>& args) {
3938
3926
Environment* env = Environment::GetCurrent (args);
3939
3927
3940
- THROW_AND_RETURN_IF_NOT_BUFFER (args[0 ], " Key" );
3928
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[0 ], " Key" );
3941
3929
char * kbuf = Buffer::Data (args[0 ]);
3942
3930
ssize_t klen = Buffer::Length (args[0 ]);
3943
3931
3944
- THROW_AND_RETURN_IF_NOT_BUFFER (args[1 ], " Data" );
3932
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[1 ], " Data" );
3945
3933
char * buf = Buffer::Data (args[1 ]);
3946
3934
ssize_t len = Buffer::Length (args[1 ]);
3947
3935
@@ -4097,7 +4085,7 @@ void DiffieHellman::DiffieHellmanGroup(
4097
4085
return env->ThrowError (" Group name argument is mandatory" );
4098
4086
}
4099
4087
4100
- THROW_AND_RETURN_IF_NOT_STRING (args[0 ], " Group name" );
4088
+ THROW_AND_RETURN_IF_NOT_STRING (env, args[0 ], " Group name" );
4101
4089
4102
4090
bool initialized = false ;
4103
4091
@@ -4246,7 +4234,7 @@ void DiffieHellman::ComputeSecret(const FunctionCallbackInfo<Value>& args) {
4246
4234
if (args.Length () == 0 ) {
4247
4235
return env->ThrowError (" Other party's public key argument is mandatory" );
4248
4236
} else {
4249
- THROW_AND_RETURN_IF_NOT_BUFFER (args[0 ], " Other party's public key" );
4237
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[0 ], " Other party's public key" );
4250
4238
key = BN_bin2bn (
4251
4239
reinterpret_cast <unsigned char *>(Buffer::Data (args[0 ])),
4252
4240
Buffer::Length (args[0 ]),
@@ -4319,7 +4307,7 @@ void DiffieHellman::SetKey(const v8::FunctionCallbackInfo<v8::Value>& args,
4319
4307
4320
4308
if (!Buffer::HasInstance (args[0 ])) {
4321
4309
snprintf (errmsg, sizeof (errmsg), " %s must be a buffer" , what);
4322
- return env-> ThrowTypeError ( errmsg);
4310
+ return THROW_ERR_INVALID_ARG_TYPE (env, errmsg);
4323
4311
}
4324
4312
4325
4313
BIGNUM* num =
@@ -4397,7 +4385,7 @@ void ECDH::New(const FunctionCallbackInfo<Value>& args) {
4397
4385
MarkPopErrorOnReturn mark_pop_error_on_return;
4398
4386
4399
4387
// TODO(indutny): Support raw curves?
4400
- THROW_AND_RETURN_IF_NOT_STRING (args[0 ], " ECDH curve name" );
4388
+ THROW_AND_RETURN_IF_NOT_STRING (env, args[0 ], " ECDH curve name" );
4401
4389
node::Utf8Value curve (env->isolate (), args[0 ]);
4402
4390
4403
4391
int nid = OBJ_sn2nid (*curve);
@@ -4454,7 +4442,7 @@ EC_POINT* ECDH::BufferToPoint(Environment* env,
4454
4442
void ECDH::ComputeSecret (const FunctionCallbackInfo<Value>& args) {
4455
4443
Environment* env = Environment::GetCurrent (args);
4456
4444
4457
- THROW_AND_RETURN_IF_NOT_BUFFER (args[0 ], " Data" );
4445
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[0 ], " Data" );
4458
4446
4459
4447
ECDH* ecdh;
4460
4448
ASSIGN_OR_RETURN_UNWRAP (&ecdh, args.Holder ());
@@ -4557,7 +4545,7 @@ void ECDH::SetPrivateKey(const FunctionCallbackInfo<Value>& args) {
4557
4545
ECDH* ecdh;
4558
4546
ASSIGN_OR_RETURN_UNWRAP (&ecdh, args.Holder ());
4559
4547
4560
- THROW_AND_RETURN_IF_NOT_BUFFER (args[0 ], " Private key" );
4548
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[0 ], " Private key" );
4561
4549
4562
4550
BIGNUM* priv = BN_bin2bn (
4563
4551
reinterpret_cast <unsigned char *>(Buffer::Data (args[0 ].As <Object>())),
@@ -4611,7 +4599,7 @@ void ECDH::SetPublicKey(const FunctionCallbackInfo<Value>& args) {
4611
4599
ECDH* ecdh;
4612
4600
ASSIGN_OR_RETURN_UNWRAP (&ecdh, args.Holder ());
4613
4601
4614
- THROW_AND_RETURN_IF_NOT_BUFFER (args[0 ], " Public key" );
4602
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[0 ], " Public key" );
4615
4603
4616
4604
MarkPopErrorOnReturn mark_pop_error_on_return;
4617
4605
0 commit comments