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 bf42dc64 fix(go/adbc/drivermgr): don't call potentially nil pointer 
(#1586)
bf42dc64 is described below

commit bf42dc64a98559b0d6602dd709dc18d05db9764f
Author: David Li <[email protected]>
AuthorDate: Mon Mar 4 14:21:39 2024 -0500

    fix(go/adbc/drivermgr): don't call potentially nil pointer (#1586)
    
    Fixes #1476.
---
 go/adbc/drivermgr/wrapper.go             | 15 +++++++++++++--
 go/adbc/drivermgr/wrapper_sqlite_test.go |  4 ++--
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/go/adbc/drivermgr/wrapper.go b/go/adbc/drivermgr/wrapper.go
index e195af08..09398c94 100644
--- a/go/adbc/drivermgr/wrapper.go
+++ b/go/adbc/drivermgr/wrapper.go
@@ -27,7 +27,12 @@ package drivermgr
 // #include "adbc.h"
 // #include <stdlib.h>
 //
-// void releaseErr(struct AdbcError* err) { err->release(err); }
+// void releaseErr(struct AdbcError* err) {
+//     if (err->release != NULL) {
+//         err->release(err);
+//         err->release = NULL;
+//     }
+// }
 // struct ArrowArray* allocArr() {
 //     return (struct ArrowArray*)malloc(sizeof(struct ArrowArray));
 // }
@@ -112,7 +117,13 @@ type Database struct {
 }
 
 func toAdbcError(code adbc.Status, e *C.struct_AdbcError) error {
-       err := &adbc.Error{
+       if e == nil || e.release == nil {
+               return adbc.Error{
+                       Code: code,
+                       Msg:  "[drivermgr] nil error",
+               }
+       }
+       err := adbc.Error{
                Code:       code,
                VendorCode: int32(e.vendor_code),
                Msg:        C.GoString(e.message),
diff --git a/go/adbc/drivermgr/wrapper_sqlite_test.go 
b/go/adbc/drivermgr/wrapper_sqlite_test.go
index 94fca311..6ca13e99 100644
--- a/go/adbc/drivermgr/wrapper_sqlite_test.go
+++ b/go/adbc/drivermgr/wrapper_sqlite_test.go
@@ -453,7 +453,7 @@ func (dm *DriverMgrSuite) TestSqlExecuteInvalid() {
        _, _, err = st.ExecuteQuery(dm.ctx)
        dm.Require().Error(err)
 
-       var adbcErr *adbc.Error
+       var adbcErr adbc.Error
        dm.ErrorAs(err, &adbcErr)
        dm.ErrorContains(adbcErr, "[SQLite] Failed to prepare query:")
        dm.ErrorContains(adbcErr, "syntax error")
@@ -610,7 +610,7 @@ func TestDriverMgrCustomInitFunc(t *testing.T) {
                "entrypoint": "ThisSymbolDoesNotExist",
        })
        assert.Nil(t, db)
-       var exp *adbc.Error
+       var exp adbc.Error
        assert.ErrorAs(t, err, &exp)
        assert.Equal(t, adbc.StatusInternal, exp.Code)
        if runtime.GOOS == "windows" {

Reply via email to