11
11
jobject v8ToJava_javaObject (JNIEnv* env, v8::Local<v8::Object> obj);
12
12
jobject v8ToJava_javaLong (JNIEnv* env, v8::Local<v8::Object> obj);
13
13
14
+ bool hasSetFailed (Nan::Maybe<bool > v) {
15
+ if (v.IsNothing ()) {
16
+ return false ;
17
+ }
18
+ return v.ToChecked () == false ;
19
+ }
20
+
14
21
void javaReflectionGetMethods (JNIEnv *env, jclass clazz, std::list<jobject>* methods, bool includeStatic) {
15
22
jclass clazzclazz = env->FindClass (" java/lang/Class" );
16
23
jmethodID clazz_getMethods = env->GetMethodID (clazzclazz, " getMethods" , " ()[Ljava/lang/reflect/Method;" );
@@ -452,7 +459,9 @@ v8::Local<v8::Value> javaExceptionToV8(Java* java, JNIEnv* env, jthrowable ex, c
452
459
msg << " \n " << javaExceptionToString (env, ex);
453
460
454
461
v8::Local<v8::Value> v8ex = v8::Exception::Error (Nan::New<v8::String>(msg.str ().c_str ()).ToLocalChecked ());
455
- ((v8::Object*)*v8ex)->Set (Nan::GetCurrentContext (), Nan::New<v8::String>(" cause" ).ToLocalChecked (), javaToV8 (java, env, ex));
462
+ if (hasSetFailed (((v8::Object*)*v8ex)->Set (Nan::GetCurrentContext (), Nan::New<v8::String>(" cause" ).ToLocalChecked (), javaToV8 (java, env, ex)))) {
463
+ return v8::Exception::Error (Nan::New<v8::String>(" could not set cause" ).ToLocalChecked ());
464
+ }
456
465
return v8ex;
457
466
}
458
467
@@ -576,7 +585,9 @@ v8::Local<v8::Value> javaArrayToV8(Java* java, JNIEnv* env, jobjectArray objArra
576
585
{
577
586
jboolean* elems = env->GetBooleanArrayElements ((jbooleanArray)objArray, 0 );
578
587
for (jsize i=0 ; i<arraySize; i++) {
579
- result->Set (Nan::GetCurrentContext (), i, Nan::New<v8::Boolean >(elems[i]));
588
+ if (hasSetFailed (result->Set (Nan::GetCurrentContext (), i, Nan::New<v8::Boolean >(elems[i])))) {
589
+ return v8::Exception::Error (Nan::New<v8::String>(" set array element failed" ).ToLocalChecked ());
590
+ }
580
591
}
581
592
env->ReleaseBooleanArrayElements ((jbooleanArray)objArray, elems, 0 );
582
593
}
@@ -638,7 +649,9 @@ v8::Local<v8::Value> javaArrayToV8(Java* java, JNIEnv* env, jobjectArray objArra
638
649
jlong* elems = env->GetLongArrayElements ((jlongArray)objArray, 0 );
639
650
for (jsize i=0 ; i<arraySize; i++) {
640
651
jobject obj = longToJavaLongObj (env, elems[i]);
641
- result->Set (Nan::GetCurrentContext (), i, JavaObject::New (java, obj));
652
+ if (hasSetFailed (result->Set (Nan::GetCurrentContext (), i, JavaObject::New (java, obj)))) {
653
+ return v8::Exception::Error (Nan::New<v8::String>(" could not set array element" ).ToLocalChecked ());
654
+ }
642
655
}
643
656
env->ReleaseLongArrayElements ((jlongArray)objArray, elems, 0 );
644
657
}
@@ -648,7 +661,9 @@ v8::Local<v8::Value> javaArrayToV8(Java* java, JNIEnv* env, jobjectArray objArra
648
661
for (jsize i=0 ; i<arraySize; i++) {
649
662
jobject obj = env->GetObjectArrayElement (objArray, i);
650
663
v8::Local<v8::Value> item = javaToV8 (java, env, obj);
651
- result->Set (Nan::GetCurrentContext (), i, item);
664
+ if (hasSetFailed (result->Set (Nan::GetCurrentContext (), i, item))) {
665
+ return v8::Exception::Error (Nan::New<v8::String>(" could not set array element" ).ToLocalChecked ());
666
+ }
652
667
}
653
668
break ;
654
669
}
@@ -711,7 +726,9 @@ v8::Local<v8::Value> javaToV8(Java* java, JNIEnv* env, jobject obj, DynamicProxy
711
726
std::string strValue = javaObjectToString (env, obj);
712
727
v8::Local<v8::Value> v8Result = Nan::New<v8::NumberObject>((double )result);
713
728
v8::NumberObject* v8ResultNumberObject = v8::NumberObject::Cast (*v8Result);
714
- v8ResultNumberObject->Set (Nan::GetCurrentContext (), Nan::New<v8::String>(" longValue" ).ToLocalChecked (), Nan::New<v8::String>(strValue.c_str ()).ToLocalChecked ());
729
+ if (hasSetFailed (v8ResultNumberObject->Set (Nan::GetCurrentContext (), Nan::New<v8::String>(" longValue" ).ToLocalChecked (), Nan::New<v8::String>(strValue.c_str ()).ToLocalChecked ()))) {
730
+ return v8::Exception::Error (Nan::New<v8::String>(" could not set longValue" ).ToLocalChecked ());
731
+ }
715
732
SetHiddenValue (v8ResultNumberObject, Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_LONG).ToLocalChecked (), Nan::New<v8::Boolean >(true ));
716
733
return v8Result;
717
734
}
0 commit comments