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
@@ -3938,11 +3926,11 @@ template <PublicKeyCipher::Operation operation,
3938
3926
void PublicKeyCipher::Cipher (const FunctionCallbackInfo<Value>& args) {
3939
3927
Environment* env = Environment::GetCurrent (args);
3940
3928
3941
- THROW_AND_RETURN_IF_NOT_BUFFER (args[0 ], " Key" );
3929
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[0 ], " Key" );
3942
3930
char * kbuf = Buffer::Data (args[0 ]);
3943
3931
ssize_t klen = Buffer::Length (args[0 ]);
3944
3932
3945
- THROW_AND_RETURN_IF_NOT_BUFFER (args[1 ], " Data" );
3933
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[1 ], " Data" );
3946
3934
char * buf = Buffer::Data (args[1 ]);
3947
3935
ssize_t len = Buffer::Length (args[1 ]);
3948
3936
@@ -4098,7 +4086,7 @@ void DiffieHellman::DiffieHellmanGroup(
4098
4086
return env->ThrowError (" Group name argument is mandatory" );
4099
4087
}
4100
4088
4101
- THROW_AND_RETURN_IF_NOT_STRING (args[0 ], " Group name" );
4089
+ THROW_AND_RETURN_IF_NOT_STRING (env, args[0 ], " Group name" );
4102
4090
4103
4091
bool initialized = false ;
4104
4092
@@ -4247,7 +4235,7 @@ void DiffieHellman::ComputeSecret(const FunctionCallbackInfo<Value>& args) {
4247
4235
if (args.Length () == 0 ) {
4248
4236
return env->ThrowError (" Other party's public key argument is mandatory" );
4249
4237
} else {
4250
- THROW_AND_RETURN_IF_NOT_BUFFER (args[0 ], " Other party's public key" );
4238
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[0 ], " Other party's public key" );
4251
4239
key = BN_bin2bn (
4252
4240
reinterpret_cast <unsigned char *>(Buffer::Data (args[0 ])),
4253
4241
Buffer::Length (args[0 ]),
@@ -4320,7 +4308,7 @@ void DiffieHellman::SetKey(const v8::FunctionCallbackInfo<v8::Value>& args,
4320
4308
4321
4309
if (!Buffer::HasInstance (args[0 ])) {
4322
4310
snprintf (errmsg, sizeof (errmsg), " %s must be a buffer" , what);
4323
- return env-> ThrowTypeError ( errmsg);
4311
+ return THROW_ERR_INVALID_ARG_TYPE (env, errmsg);
4324
4312
}
4325
4313
4326
4314
BIGNUM* num =
@@ -4398,7 +4386,7 @@ void ECDH::New(const FunctionCallbackInfo<Value>& args) {
4398
4386
MarkPopErrorOnReturn mark_pop_error_on_return;
4399
4387
4400
4388
// TODO(indutny): Support raw curves?
4401
- THROW_AND_RETURN_IF_NOT_STRING (args[0 ], " ECDH curve name" );
4389
+ THROW_AND_RETURN_IF_NOT_STRING (env, args[0 ], " ECDH curve name" );
4402
4390
node::Utf8Value curve (env->isolate (), args[0 ]);
4403
4391
4404
4392
int nid = OBJ_sn2nid (*curve);
@@ -4455,7 +4443,7 @@ EC_POINT* ECDH::BufferToPoint(Environment* env,
4455
4443
void ECDH::ComputeSecret (const FunctionCallbackInfo<Value>& args) {
4456
4444
Environment* env = Environment::GetCurrent (args);
4457
4445
4458
- THROW_AND_RETURN_IF_NOT_BUFFER (args[0 ], " Data" );
4446
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[0 ], " Data" );
4459
4447
4460
4448
ECDH* ecdh;
4461
4449
ASSIGN_OR_RETURN_UNWRAP (&ecdh, args.Holder ());
@@ -4558,7 +4546,7 @@ void ECDH::SetPrivateKey(const FunctionCallbackInfo<Value>& args) {
4558
4546
ECDH* ecdh;
4559
4547
ASSIGN_OR_RETURN_UNWRAP (&ecdh, args.Holder ());
4560
4548
4561
- THROW_AND_RETURN_IF_NOT_BUFFER (args[0 ], " Private key" );
4549
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[0 ], " Private key" );
4562
4550
4563
4551
BIGNUM* priv = BN_bin2bn (
4564
4552
reinterpret_cast <unsigned char *>(Buffer::Data (args[0 ].As <Object>())),
@@ -4612,7 +4600,7 @@ void ECDH::SetPublicKey(const FunctionCallbackInfo<Value>& args) {
4612
4600
ECDH* ecdh;
4613
4601
ASSIGN_OR_RETURN_UNWRAP (&ecdh, args.Holder ());
4614
4602
4615
- THROW_AND_RETURN_IF_NOT_BUFFER (args[0 ], " Public key" );
4603
+ THROW_AND_RETURN_IF_NOT_BUFFER (env, args[0 ], " Public key" );
4616
4604
4617
4605
MarkPopErrorOnReturn mark_pop_error_on_return;
4618
4606
0 commit comments