You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by li...@apache.org on 2023/09/01 17:56:46 UTC
[arrow-adbc] branch main updated: fix(c/driver_manager): fix crash when error is null (#1029)
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 1bc8a7fa fix(c/driver_manager): fix crash when error is null (#1029)
1bc8a7fa is described below
commit 1bc8a7faaab630e13c0d03bb3530acc1c7b37fc5
Author: David Li <li...@gmail.com>
AuthorDate: Fri Sep 1 13:56:41 2023 -0400
fix(c/driver_manager): fix crash when error is null (#1029)
Fixes #1028.
---
c/driver_manager/adbc_driver_manager.cc | 3 ++-
c/driver_manager/adbc_driver_manager_test.cc | 15 +++++++++++++++
go/adbc/drivermgr/adbc_driver_manager.cc | 3 ++-
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/c/driver_manager/adbc_driver_manager.cc b/c/driver_manager/adbc_driver_manager.cc
index e4287534..c28bea93 100644
--- a/c/driver_manager/adbc_driver_manager.cc
+++ b/c/driver_manager/adbc_driver_manager.cc
@@ -651,7 +651,8 @@ const struct AdbcError* AdbcErrorFromArrayStream(struct ArrowArrayStream* stream
}
#define INIT_ERROR(ERROR, SOURCE) \
- if ((ERROR)->vendor_code == ADBC_ERROR_VENDOR_CODE_PRIVATE_DATA) { \
+ if ((ERROR) != nullptr && \
+ (ERROR)->vendor_code == ADBC_ERROR_VENDOR_CODE_PRIVATE_DATA) { \
(ERROR)->private_driver = (SOURCE)->private_driver; \
}
diff --git a/c/driver_manager/adbc_driver_manager_test.cc b/c/driver_manager/adbc_driver_manager_test.cc
index 5e703903..58d056c4 100644
--- a/c/driver_manager/adbc_driver_manager_test.cc
+++ b/c/driver_manager/adbc_driver_manager_test.cc
@@ -33,6 +33,7 @@ std::string AdbcDriverManagerDefaultEntrypoint(const std::string& filename);
namespace adbc {
+using adbc_validation::Handle;
using adbc_validation::IsOkStatus;
using adbc_validation::IsStatus;
@@ -227,6 +228,20 @@ class SqliteDatabaseTest : public ::testing::Test, public adbc_validation::Datab
};
ADBCV_TEST_DATABASE(SqliteDatabaseTest)
+TEST_F(SqliteDatabaseTest, NullError) {
+ Handle<AdbcConnection> conn;
+
+ ASSERT_THAT(AdbcDatabaseNew(&database, nullptr), IsOkStatus());
+ ASSERT_THAT(quirks()->SetupDatabase(&database, nullptr), IsOkStatus());
+ ASSERT_THAT(AdbcDatabaseInit(&database, nullptr), IsOkStatus());
+
+ ASSERT_THAT(AdbcConnectionNew(&conn.value, nullptr), IsOkStatus());
+ ASSERT_THAT(AdbcConnectionInit(&conn.value, &database, nullptr), IsOkStatus());
+ ASSERT_THAT(AdbcConnectionRelease(&conn.value, nullptr), IsOkStatus());
+
+ ASSERT_THAT(AdbcDatabaseRelease(&database, nullptr), IsOkStatus());
+}
+
class SqliteConnectionTest : public ::testing::Test,
public adbc_validation::ConnectionTest {
public:
diff --git a/go/adbc/drivermgr/adbc_driver_manager.cc b/go/adbc/drivermgr/adbc_driver_manager.cc
index e4287534..c28bea93 100644
--- a/go/adbc/drivermgr/adbc_driver_manager.cc
+++ b/go/adbc/drivermgr/adbc_driver_manager.cc
@@ -651,7 +651,8 @@ const struct AdbcError* AdbcErrorFromArrayStream(struct ArrowArrayStream* stream
}
#define INIT_ERROR(ERROR, SOURCE) \
- if ((ERROR)->vendor_code == ADBC_ERROR_VENDOR_CODE_PRIVATE_DATA) { \
+ if ((ERROR) != nullptr && \
+ (ERROR)->vendor_code == ADBC_ERROR_VENDOR_CODE_PRIVATE_DATA) { \
(ERROR)->private_driver = (SOURCE)->private_driver; \
}