From 7b85ac1d3551823cb0bd8226e7a3fdd6471b152e Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sat, 1 Feb 2025 10:42:30 -0800 Subject: [PATCH 1/2] fix crash on finalization for logical_type from get_value_type --- bindings/src/duckdb_node_bindings.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/bindings/src/duckdb_node_bindings.cpp b/bindings/src/duckdb_node_bindings.cpp index 28cd027..1571965 100644 --- a/bindings/src/duckdb_node_bindings.cpp +++ b/bindings/src/duckdb_node_bindings.cpp @@ -360,16 +360,17 @@ static const napi_type_tag LogicalTypeTypeTag = { }; void FinalizeLogicalType(Napi::BasicEnv, duckdb_logical_type logical_type) { - if (logical_type) { - duckdb_destroy_logical_type(&logical_type); - logical_type = nullptr; - } + duckdb_destroy_logical_type(&logical_type); } Napi::External<_duckdb_logical_type> CreateExternalForLogicalType(Napi::Env env, duckdb_logical_type logical_type) { return CreateExternal<_duckdb_logical_type>(env, LogicalTypeTypeTag, logical_type, FinalizeLogicalType); } +Napi::External<_duckdb_logical_type> CreateExternalForLogicalTypeWithoutFinalizer(Napi::Env env, duckdb_logical_type logical_type) { + return CreateExternalWithoutFinalizer<_duckdb_logical_type>(env, LogicalTypeTypeTag, logical_type); +} + duckdb_logical_type GetLogicalTypeFromExternal(Napi::Env env, Napi::Value value) { return GetDataFromExternal<_duckdb_logical_type>(env, LogicalTypeTypeTag, value, "Invalid logical type argument"); } @@ -2554,7 +2555,7 @@ class DuckDBNodeAddon : public Napi::Addon { auto env = info.Env(); auto value = GetValueFromExternal(env, info[0]); auto logical_type = duckdb_get_value_type(value); - return CreateExternalForLogicalType(env, logical_type); + return CreateExternalForLogicalTypeWithoutFinalizer(env, logical_type); } // DUCKDB_API duckdb_blob duckdb_get_blob(duckdb_value val); From 92d2c30f82143fb94ba19aedbaf5505959eaf1df Mon Sep 17 00:00:00 2001 From: Jeff Raymakers Date: Sat, 1 Feb 2025 10:45:17 -0800 Subject: [PATCH 2/2] re-enable bindings tests on Windows --- .github/workflows/DuckDBNodeBindingsAndAPI.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/DuckDBNodeBindingsAndAPI.yml b/.github/workflows/DuckDBNodeBindingsAndAPI.yml index 87a863b..2f1238a 100644 --- a/.github/workflows/DuckDBNodeBindingsAndAPI.yml +++ b/.github/workflows/DuckDBNodeBindingsAndAPI.yml @@ -267,10 +267,9 @@ jobs: working-directory: bindings run: pnpm run build - # Fails for unknown reasons - # - name: Bindings - Test - # working-directory: bindings - # run: pnpm test + - name: Bindings - Test + working-directory: bindings + run: pnpm test - name: API - Build working-directory: api