Skip to content

Commit 2feec43

Browse files
committed
Updated NAN calls and other static code analysis warnings
1 parent 1475ad7 commit 2feec43

File tree

6 files changed

+430
-62
lines changed

6 files changed

+430
-62
lines changed

doc/api.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1512,6 +1512,7 @@ cache](#connpoolcache) to use to obtain the connection.
15121512

15131513
###### <a name="getconnectiondbattrsconnattrs"></a> 3.3.2.1.2 Connection Attributes
15141514

1515+
15151516
```
15161517
Object connAttrs
15171518
```

src/njsCommon.cpp

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ void njsBaton::CheckJSException(Nan::TryCatch *tryCatch)
197197
if (tryCatch->HasCaught()) {
198198
Local<String> message = tryCatch->Message()->Get();
199199
v8::String::Utf8Value v8str(message->ToString());
200-
error = std::string(*v8str, v8str.length());
200+
error = std::string(*v8str, static_cast<size_t>(v8str.length()));
201201
tryCatch->Reset();
202202
}
203203
}
@@ -340,7 +340,7 @@ void njsBaton::AsyncAfterWorkCallback(uv_work_t *req, int status)
340340

341341
// make JS callback
342342
Nan::MakeCallback(Nan::GetCurrentContext()->Global(), callback,
343-
numCallbackArgs, callbackArgs);
343+
static_cast<int>(numCallbackArgs), callbackArgs);
344344

345345
// we no longer need the callback args
346346
delete [] callbackArgs;
@@ -439,7 +439,9 @@ bool njsBaton::GetBoolFromJSON(Local<Object> obj, const char *key, int index,
439439
if (!error.empty())
440440
return false;
441441

442-
jsValue = obj->Get(Nan::New<v8::String>(key).ToLocalChecked());
442+
MaybeLocal<Value> mval = Nan::Get (obj, Nan::New(key).ToLocalChecked());
443+
if(!mval.ToLocal(&jsValue))
444+
return false;
443445

444446
/* Undefined implies value not provided or equivalent */
445447
if (!jsValue->IsUndefined()) {
@@ -473,7 +475,10 @@ bool njsBaton::GetIntFromJSON(Local<Object> obj, const char *key,
473475

474476
if (!error.empty())
475477
return false;
476-
jsValue = obj->Get(Nan::New<v8::String>(key).ToLocalChecked());
478+
MaybeLocal<Value> mval = Nan::Get(obj, Nan::New(key).ToLocalChecked());
479+
if (!mval.ToLocal(&jsValue))
480+
return false;
481+
477482
if (jsValue->IsInt32()) {
478483
*value = Nan::To<int32_t>(jsValue).FromJust();
479484
return true;
@@ -528,10 +533,14 @@ bool njsBaton::GetStringFromJSON(Local<Object> obj, const char *key, int index,
528533

529534
if (!error.empty())
530535
return false;
531-
jsValue = obj->Get(Nan::New<v8::String>(key).ToLocalChecked());
536+
537+
MaybeLocal<Value> mval = Nan::Get(obj, Nan::New(key).ToLocalChecked());
538+
if (!mval.ToLocal (&jsValue))
539+
return false;
540+
532541
if (jsValue->IsString()) {
533542
v8::String::Utf8Value utf8str(jsValue->ToString());
534-
value = std::string(*utf8str, utf8str.length());
543+
value = std::string(*utf8str, static_cast<size_t>(utf8str.length()));
535544
return true;
536545
} else if (jsValue->IsUndefined()) {
537546
return true;
@@ -561,8 +570,9 @@ bool njsBaton::GetUnsignedIntFromJSON(Local<Object> obj, const char *key,
561570

562571
if (!error.empty())
563572
return false;
564-
jsValue = obj->Get(Nan::New<v8::String>(key).ToLocalChecked());
565-
if (jsValue.IsEmpty())
573+
574+
MaybeLocal<Value> mval = Nan::Get(obj, Nan::New(key).ToLocalChecked());
575+
if (!mval.ToLocal(&jsValue))
566576
return false;
567577
if (jsValue->IsUint32()) {
568578
*value = Nan::To<uint32_t>(jsValue).FromJust();
@@ -668,7 +678,7 @@ bool njsCommon::GetStringArg(Nan::NAN_METHOD_ARGS_TYPE args,
668678
return false;
669679
}
670680
v8::String::Utf8Value utf8str(args[index]->ToString());
671-
value = std::string(*utf8str, utf8str.length());
681+
value = std::string(*utf8str, static_cast<size_t>(utf8str.length()));
672682
return true;
673683
}
674684

@@ -763,7 +773,7 @@ bool njsCommon::SetPropString(Local<Value> value, std::string *valuePtr,
763773
return false;
764774
}
765775
v8::String::Utf8Value utfstr(value->ToString());
766-
*valuePtr = std::string(*utfstr, utfstr.length());
776+
*valuePtr = std::string(*utfstr, static_cast<size_t>(utfstr.length()));
767777
return true;
768778
}
769779

src/njsConnection.cpp

Lines changed: 56 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -524,12 +524,14 @@ bool njsConnection::ProcessBinds(Nan::NAN_METHOD_ARGS_TYPE args,
524524
unsigned int index, njsBaton *baton)
525525
{
526526
Nan::HandleScope scope;
527-
if (args[index]->IsArray()) {
528-
Local<Array> bindsArray = Local<Array>::Cast(args[index]);
527+
if (args[static_cast<int>(index)]->IsArray()) {
528+
Local<Array> bindsArray = Local<Array>::Cast(
529+
args[static_cast<int>(index)]);
529530
return ProcessBindsByPos(bindsArray, baton);
530531
}
531-
if (args[index]->IsObject() && !args[index]->IsFunction()) {
532-
Local<Object> bindsObject = args[index]->ToObject();
532+
if (args[static_cast<int>(index)]->IsObject() &&
533+
!args[static_cast<int>(index)]->IsFunction()) {
534+
Local<Object> bindsObject = args[static_cast<int>(index)]->ToObject();
533535
return ProcessBindsByName(bindsObject, baton);
534536
}
535537
baton->error = njsMessages::Get(errInvalidParameterType, index);
@@ -550,15 +552,18 @@ bool njsConnection::ProcessBindsByName(Handle<Object> bindObj, njsBaton *baton)
550552
baton->bindVars = new njsVariable[baton->numBindVars];
551553
for (uint32_t i = 0; i < baton->numBindVars; i++) {
552554
njsVariable *var = &baton->bindVars[i];
553-
Local<String> temp = array->Get(i).As<String>();
555+
Local<Value> temp = Nan::Get(array, i).ToLocalChecked();
554556
v8::String::Utf8Value v8str(temp->ToString());
555-
std::string str = std::string(*v8str, v8str.length());
557+
std::string str = std::string(*v8str,
558+
static_cast<size_t>(v8str.length()));
556559
var->name = ":" + str;
557560
var->pos = i + 1;
558-
559-
Local<Value> val = bindObj->Get(temp);
560-
if (val.IsEmpty ())
561+
MaybeLocal<Value> mval = Nan::Get (bindObj,
562+
Nan::New(str).ToLocalChecked());
563+
Local<Value> val;
564+
if (!mval.ToLocal (&val))
561565
return false;
566+
562567
if (!ProcessBind(val, var, false, baton))
563568
return false;
564569
}
@@ -580,9 +585,7 @@ bool njsConnection::ProcessBindsByPos(Handle<Array> binds, njsBaton *baton)
580585
for (uint32_t i = 0; i < baton->numBindVars; i++) {
581586
njsVariable *var = &baton->bindVars[i];
582587
var->pos = i + 1;
583-
Local<Value> val = binds->Get(i);
584-
if (val.IsEmpty ())
585-
return false;
588+
Local<Value> val = Nan::Get(binds,i).ToLocalChecked ();
586589
if (!ProcessBind(val, var, true, baton))
587590
return false;
588591
}
@@ -627,9 +630,12 @@ bool njsConnection::ProcessBind(Local<Value> val, njsVariable *var,
627630
Local<Array> keys = bindUnit->GetOwnPropertyNames();
628631
bool valid = false;
629632
for (uint32_t i = 0; i < keys->Length(); i++) {
630-
Local<String> temp = keys->Get(i).As<String>();
633+
Local<String> temp = Nan::Get(keys,
634+
i).ToLocalChecked().As<String>();
635+
631636
v8::String::Utf8Value utf8str(temp->ToString());
632-
std::string key = std::string(*utf8str, utf8str.length());
637+
std::string key = std::string(*utf8str,
638+
static_cast<size_t>(utf8str.length()));
633639
if (key.compare("dir") == 0 ||
634640
key.compare("type") == 0 ||
635641
key.compare("maxSize") == 0 ||
@@ -659,8 +665,8 @@ bool njsConnection::ProcessBind(Local<Value> val, njsVariable *var,
659665
return false;
660666
if (var->maxArraySize > 0)
661667
var->isArray = true;
662-
bindValue =
663-
bindUnit->Get(Nan::New<v8::String>("val").ToLocalChecked());
668+
bindValue = Nan::Get(bindUnit,
669+
Nan::New<v8::String>("val").ToLocalChecked()).ToLocalChecked ();
664670

665671
// otherwise, bind value is directly passed and other values are defaults
666672
} else {
@@ -818,7 +824,7 @@ bool njsConnection::ProcessBindValue(Local<Value> value, njsVariable *var,
818824

819825
// process each element in the array
820826
for (uint32_t i = 0; i < arrayVal->Length(); i++) {
821-
Local<Value> elementValue = arrayVal->Get(i);
827+
Local<Value> elementValue = Nan::Get (arrayVal, i).ToLocalChecked ();
822828
if (!ProcessScalarBindValue(elementValue, var, i, baton))
823829
return false;
824830
}
@@ -857,7 +863,7 @@ bool njsConnection::ProcessScalarBindValue(Local<Value> value,
857863
if (utf8str.length() == 0)
858864
data->isNull = 1;
859865
else if (dpiVar_setFromBytes(var->dpiVarHandle, pos, *utf8str,
860-
utf8str.length()) < 0) {
866+
static_cast<uint32_t>( utf8str.length())) < 0) {
861867
baton->GetDPIError();
862868
return false;
863869
}
@@ -970,7 +976,7 @@ bool njsConnection::GetBindTypeAndSizeFromValue(njsVariable *var,
970976
} else if (value->IsString()) {
971977
*bindType = NJS_DATATYPE_STR;
972978
v8::String::Utf8Value utf8str(value->ToString());
973-
*maxSize = utf8str.length();
979+
*maxSize = static_cast<uint32_t>(utf8str.length());
974980
} else if (value->IsInt32() || value->IsUint32()) {
975981
*bindType = NJS_DATATYPE_INT;
976982
} else if (value->IsNumber()) {
@@ -983,7 +989,7 @@ bool njsConnection::GetBindTypeAndSizeFromValue(njsVariable *var,
983989
Local<Value> element;
984990
uint32_t elementBindType, elementMaxSize;
985991
for (uint32_t i = 0; i < arrayVal->Length(); i++) {
986-
element = arrayVal->Get(i);
992+
element = Nan::Get (arrayVal, i).ToLocalChecked ();
987993
if (element->IsUndefined() || element->IsNull())
988994
continue;
989995
if (!GetBindTypeAndSizeFromValue(var, element, &elementBindType,
@@ -997,10 +1003,11 @@ bool njsConnection::GetBindTypeAndSizeFromValue(njsVariable *var,
9971003
} else if (value->IsObject()) {
9981004
if (Buffer::HasInstance(value)) {
9991005
*bindType = NJS_DATATYPE_BUFFER;
1000-
*maxSize = (uint32_t) Buffer::Length(value->ToObject());
1006+
*maxSize = static_cast<uint32_t>(
1007+
Buffer::Length(value->ToObject()));
10011008
} else if (njsILob::HasInstance(value)) {
10021009
njsILob *lob = njsILob::GetInstance(value);
1003-
*bindType = lob->GetDataType();
1010+
*bindType = static_cast<uint32_t>(lob->GetDataType());
10041011
}
10051012
} else {
10061013
baton->error= njsMessages::Get(errInvalidBindDataType, 2);
@@ -1021,13 +1028,14 @@ bool njsConnection::ProcessOptions(Nan::NAN_METHOD_ARGS_TYPE args,
10211028
Nan::HandleScope scope;
10221029

10231030
// an object is expected, not an array
1024-
if (!args[index]->IsObject() || args[index]->IsArray()) {
1031+
if (!args[static_cast<int>(index)]->IsObject() ||
1032+
args[static_cast<int>(index)]->IsArray()) {
10251033
baton->error = njsMessages::Get(errInvalidParameterType, index);
10261034
return false;
10271035
}
10281036

10291037
// process the basic options
1030-
Local<Object> options = args[index]->ToObject();
1038+
Local<Object> options = args[static_cast<int>(index)]->ToObject();
10311039
if (!baton->GetUnsignedIntFromJSON(options, "maxRows", 2, &baton->maxRows))
10321040
return false;
10331041
if (!baton->GetPositiveIntFromJSON(options, "fetchArraySize", 2,
@@ -1051,9 +1059,12 @@ bool njsConnection::ProcessOptions(Nan::NAN_METHOD_ARGS_TYPE args,
10511059

10521060
// process the fetchAs specifications, if applicable
10531061
Local<Value> key = Nan::New<v8::String>("fetchInfo").ToLocalChecked();
1054-
Local<Value> val = options->Get(key);
1055-
if (val.IsEmpty ())
1062+
MaybeLocal<Value> mval = Nan::Get(options, key);
1063+
Local<Value> val;
1064+
1065+
if (!mval.ToLocal(&val))
10561066
return false;
1067+
10571068
if (!val->IsUndefined() && !val->IsNull()) {
10581069
Local<Object> jsFetchInfo = val->ToObject();
10591070
Local<Array> keys = jsFetchInfo->GetOwnPropertyNames();
@@ -1064,11 +1075,18 @@ bool njsConnection::ProcessOptions(Nan::NAN_METHOD_ARGS_TYPE args,
10641075
baton->numFetchInfo = keys->Length();
10651076
baton->fetchInfo = new njsFetchInfo[baton->numFetchInfo];
10661077
for (uint32_t i = 0; i < baton->numFetchInfo; i++) {
1067-
Local<String> temp = keys->Get(i).As<String>();
1078+
Local<String> temp = Nan::Get (keys,
1079+
i).ToLocalChecked ().As<String>();
1080+
10681081
v8::String::Utf8Value utf8str(temp->ToString());
1069-
baton->fetchInfo[i].name = std::string(*utf8str, utf8str.length());
1070-
Local<Object> colInfo = jsFetchInfo->Get(temp)->ToObject();
1071-
uint32_t tempType = NJS_DATATYPE_UNKNOWN;
1082+
baton->fetchInfo[i].name = std::string(*utf8str,
1083+
static_cast<size_t>(utf8str.length()));
1084+
v8::String::Utf8Value v8str(temp->ToString());
1085+
std::string str = std::string(*v8str,
1086+
static_cast<size_t>(v8str.length()));
1087+
Local<Object> colInfo = Nan::Get(jsFetchInfo,
1088+
Nan::New(str).ToLocalChecked()).ToLocalChecked()->ToObject();
1089+
uint32_t tempType = static_cast<uint32_t>(NJS_DATATYPE_UNKNOWN);
10721090
if (!baton->GetUnsignedIntFromJSON(colInfo, "type", 2, &tempType))
10731091
return false;
10741092
if (tempType == (uint32_t) NJS_DATATYPE_UNKNOWN) {
@@ -1110,7 +1128,8 @@ bool njsConnection::GetScalarValueFromVar(njsBaton *baton, njsVariable *var,
11101128
argv[0] = njsILob::CreateFromProtoLob(protoLob);
11111129
Local<Value> key = Nan::New<String>("newLob").ToLocalChecked();
11121130
Local<Object> jsOracledb = Nan::New(baton->jsOracledb);
1113-
Local<Function> fn = Local<Function>::Cast(jsOracledb->Get(key));
1131+
Local<Function> fn = Local<Function>::Cast(Nan::Get( jsOracledb,
1132+
key).ToLocalChecked());
11141133
temp = fn->Call(jsOracledb, 1, argv);
11151134
}
11161135
value = scope.Escape(temp);
@@ -1291,7 +1310,8 @@ void njsConnection::SetTextAttribute(Nan::NAN_SETTER_ARGS_TYPE args,
12911310
return;
12921311
}
12931312
v8::String::Utf8Value utfstr(value->ToString());
1294-
if ((*setter)(connection->dpiConnHandle, *utfstr, utfstr.length()) < 0)
1313+
if ((*setter)(connection->dpiConnHandle, *utfstr,
1314+
static_cast<int32_t> (utfstr.length()) < 0))
12951315
njsOracledb::ThrowDPIError();
12961316
}
12971317

@@ -1683,7 +1703,8 @@ void njsConnection::Async_AfterCreateLob(njsBaton *baton, Local<Value> argv[])
16831703
tempArgv[0] = njsILob::CreateFromProtoLob(baton->protoILob);
16841704
Local<Value> key = Nan::New<String>("newLob").ToLocalChecked();
16851705
Local<Object> jsOracledb = Nan::New(baton->jsOracledb);
1686-
Local<Function> fn = Local<Function>::Cast(jsOracledb->Get(key));
1706+
Local<Function> fn = Local<Function>::Cast(Nan::Get(jsOracledb,
1707+
key).ToLocalChecked());
16871708
Local<Value> temp = fn->Call(jsOracledb, 1, tempArgv);
16881709
argv[1] = scope.Escape(temp);
16891710
}
@@ -1805,10 +1826,10 @@ NAN_GETTER(njsConnection::GetOracleServerVersion)
18051826
njsOracledb::ThrowDPIError();
18061827
return;
18071828
}
1808-
uint32_t oracleServerVersion =
1829+
uint32_t oracleServerVersion = static_cast<uint32_t> (
18091830
100000000 * versionInfo.versionNum +
18101831
1000000 * versionInfo.releaseNum + 10000 * versionInfo.updateNum +
1811-
100 * versionInfo.portReleaseNum + versionInfo.portUpdateNum;
1832+
100 * versionInfo.portReleaseNum + versionInfo.portUpdateNum);
18121833
info.GetReturnValue().Set(oracleServerVersion);
18131834
}
18141835

src/njsIntLob.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ njsILob *njsILob::GetInstance(Local<Value> val)
155155
Nan::HandleScope scope;
156156
Local<Object> obj = val->ToObject();
157157
Local <String> key = Nan::New<v8::String>("iLob").ToLocalChecked();
158-
Local<Value> v8Value = obj->Get(key);
158+
Local<Value> v8Value = Nan::Get(obj, key).ToLocalChecked();
159159

160160
if (v8Value->IsObject()) {
161161
Local<Object> obj = v8Value->ToObject();

0 commit comments

Comments
 (0)