From 65efc742b7593be29cffe4b9f1cf93aa29369b2c Mon Sep 17 00:00:00 2001 From: Joe Ferner Date: Sun, 18 May 2025 17:32:08 +0000 Subject: [PATCH] fix c++ warnings --- .vscode/c_cpp_properties.json | 19 +++++++++++++++++++ src/utils.cpp | 27 ++++++++++++++++++++++----- 2 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 .vscode/c_cpp_properties.json diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..5c437f5 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,19 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**", + "/usr/local/include/node", + "/usr/lib/jvm/java-17-openjdk-amd64/include/", + "/usr/lib/jvm/java-17-openjdk-amd64/include/linux" + ], + "defines": [], + "compilerPath": "/usr/bin/gcc", + "cStandard": "c17", + "cppStandard": "gnu++17", + "intelliSenseMode": "linux-gcc-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/src/utils.cpp b/src/utils.cpp index bd1c9bf..39c543d 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -11,6 +11,13 @@ jobject v8ToJava_javaObject(JNIEnv* env, v8::Local obj); jobject v8ToJava_javaLong(JNIEnv* env, v8::Local obj); +bool hasSetFailed(Nan::Maybe v) { + if (v.IsNothing()) { + return false; + } + return v.ToChecked() == false; +} + void javaReflectionGetMethods(JNIEnv *env, jclass clazz, std::list* methods, bool includeStatic) { jclass clazzclazz = env->FindClass("java/lang/Class"); jmethodID clazz_getMethods = env->GetMethodID(clazzclazz, "getMethods", "()[Ljava/lang/reflect/Method;"); @@ -452,7 +459,9 @@ v8::Local javaExceptionToV8(Java* java, JNIEnv* env, jthrowable ex, c msg << "\n" << javaExceptionToString(env, ex); v8::Local v8ex = v8::Exception::Error(Nan::New(msg.str().c_str()).ToLocalChecked()); - ((v8::Object*)*v8ex)->Set(Nan::GetCurrentContext(), Nan::New("cause").ToLocalChecked(), javaToV8(java, env, ex)); + if (hasSetFailed(((v8::Object*)*v8ex)->Set(Nan::GetCurrentContext(), Nan::New("cause").ToLocalChecked(), javaToV8(java, env, ex)))) { + return v8::Exception::Error(Nan::New("could not set cause").ToLocalChecked()); + } return v8ex; } @@ -576,7 +585,9 @@ v8::Local javaArrayToV8(Java* java, JNIEnv* env, jobjectArray objArra { jboolean* elems = env->GetBooleanArrayElements((jbooleanArray)objArray, 0); for(jsize i=0; iSet(Nan::GetCurrentContext(), i, Nan::New(elems[i])); + if(hasSetFailed(result->Set(Nan::GetCurrentContext(), i, Nan::New(elems[i])))) { + return v8::Exception::Error(Nan::New("set array element failed").ToLocalChecked()); + } } env->ReleaseBooleanArrayElements((jbooleanArray)objArray, elems, 0); } @@ -638,7 +649,9 @@ v8::Local javaArrayToV8(Java* java, JNIEnv* env, jobjectArray objArra jlong* elems = env->GetLongArrayElements((jlongArray)objArray, 0); for(jsize i=0; iSet(Nan::GetCurrentContext(), i, JavaObject::New(java, obj)); + if(hasSetFailed(result->Set(Nan::GetCurrentContext(), i, JavaObject::New(java, obj)))) { + return v8::Exception::Error(Nan::New("could not set array element").ToLocalChecked()); + } } env->ReleaseLongArrayElements((jlongArray)objArray, elems, 0); } @@ -648,7 +661,9 @@ v8::Local javaArrayToV8(Java* java, JNIEnv* env, jobjectArray objArra for(jsize i=0; iGetObjectArrayElement(objArray, i); v8::Local item = javaToV8(java, env, obj); - result->Set(Nan::GetCurrentContext(), i, item); + if(hasSetFailed(result->Set(Nan::GetCurrentContext(), i, item))) { + return v8::Exception::Error(Nan::New("could not set array element").ToLocalChecked()); + } } break; } @@ -711,7 +726,9 @@ v8::Local javaToV8(Java* java, JNIEnv* env, jobject obj, DynamicProxy std::string strValue = javaObjectToString(env, obj); v8::Local v8Result = Nan::New((double)result); v8::NumberObject* v8ResultNumberObject = v8::NumberObject::Cast(*v8Result); - v8ResultNumberObject->Set(Nan::GetCurrentContext(), Nan::New("longValue").ToLocalChecked(), Nan::New(strValue.c_str()).ToLocalChecked()); + if(hasSetFailed(v8ResultNumberObject->Set(Nan::GetCurrentContext(), Nan::New("longValue").ToLocalChecked(), Nan::New(strValue.c_str()).ToLocalChecked()))) { + return v8::Exception::Error(Nan::New("could not set longValue").ToLocalChecked()); + } SetHiddenValue(v8ResultNumberObject, Nan::New(V8_HIDDEN_MARKER_JAVA_LONG).ToLocalChecked(), Nan::New(true)); return v8Result; }