This is an automated email from the ASF dual-hosted git repository.

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git


The following commit(s) were added to refs/heads/main by this push:
     new 780bfa11a fix(java/driver/jni): harden JNI exception helpers (#4395)
780bfa11a is described below

commit 780bfa11a88ccd7d4bed6ce4aa1e7feffb8a3fed
Author: David Li <[email protected]>
AuthorDate: Sat Jun 20 02:59:07 2026 -0700

    fix(java/driver/jni): harden JNI exception helpers (#4395)
    
    Replace assert() guards in both ThrowJavaException helpers with proper
    null checks that return early when JNI calls fail. Also fix malformed
    JNI method descriptor in ThrowJavaException.
    
    Assisted-by: Claude Opus 4.8 <[email protected]>
---
 java/driver/jni/src/main/cpp/jni_wrapper.cc | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/java/driver/jni/src/main/cpp/jni_wrapper.cc 
b/java/driver/jni/src/main/cpp/jni_wrapper.cc
index 6af1a247c..859b37bf9 100644
--- a/java/driver/jni/src/main/cpp/jni_wrapper.cc
+++ b/java/driver/jni/src/main/cpp/jni_wrapper.cc
@@ -55,13 +55,15 @@ struct AdbcErrorGuard {
 void ThrowJavaException(JNIEnv* env, const std::string& klass,
                         const std::string& message) {
   jclass exception_klass = env->FindClass(klass.c_str());
-  assert(exception_klass != nullptr);
+  if (exception_klass == nullptr) return;
   jmethodID exception_ctor =
-      env->GetMethodID(exception_klass, "<init>", "(Ljava/lang/String)V");
-  assert(exception_ctor != nullptr);
+      env->GetMethodID(exception_klass, "<init>", "(Ljava/lang/String;)V");
+  if (exception_ctor == nullptr) return;
   jstring message_jni = env->NewStringUTF(message.c_str());
+  if (message_jni == nullptr) return;
   auto exc = static_cast<jthrowable>(
       env->NewObject(exception_klass, exception_ctor, message_jni));
+  if (exc == nullptr) return;
   env->Throw(exc);
 }
 
@@ -73,16 +75,16 @@ struct AdbcException {
 
   void ThrowJavaException(JNIEnv* env) const {
     jclass exception_klass = 
env->FindClass("org/apache/arrow/adbc/core/AdbcException");
-    assert(exception_klass != nullptr);
+    if (exception_klass == nullptr) return;
     jmethodID exception_ctor =
         env->GetMethodID(exception_klass, "<init>",
                          "(Ljava/lang/String;Ljava/lang/Throwable;"
                          "Lorg/apache/arrow/adbc/core/AdbcStatusCode;"
                          "Ljava/lang/String;I)V");
-    assert(exception_ctor != nullptr);
+    if (exception_ctor == nullptr) return;
 
     jclass status_klass = 
env->FindClass("org/apache/arrow/adbc/core/AdbcStatusCode");
-    assert(status_klass != nullptr);
+    if (status_klass == nullptr) return;
 
     jfieldID status_field;
 
@@ -113,12 +115,15 @@ struct AdbcException {
         break;
     }
 #undef CASE
+    if (status_field == nullptr) return;
     jobject status_jni = env->GetStaticObjectField(status_klass, status_field);
 
     jstring message_jni = env->NewStringUTF(message.c_str());
+    if (message_jni == nullptr) return;
     auto exc = static_cast<jthrowable>(env->NewObject(
         exception_klass, exception_ctor, message_jni, /*cause=*/nullptr, 
status_jni,
         /*sqlState=*/nullptr, /*vendorCode=*/0));
+    if (exc == nullptr) return;
     env->Throw(exc);
   }
 };

Reply via email to