Skip to content

Commit

Permalink
Merge pull request #135 from duckdb/jray/fix-crash-on-finalization-fo…
Browse files Browse the repository at this point in the history
…r-logical-type-from-get-value-type

fix crash on finalization for logical_type from get_value_type
  • Loading branch information
jraymakers authored Feb 1, 2025
2 parents a44fe9b + 92d2c30 commit 39ef74a
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 9 deletions.
7 changes: 3 additions & 4 deletions .github/workflows/DuckDBNodeBindingsAndAPI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
11 changes: 6 additions & 5 deletions bindings/src/duckdb_node_bindings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}
Expand Down Expand Up @@ -2554,7 +2555,7 @@ class DuckDBNodeAddon : public Napi::Addon<DuckDBNodeAddon> {
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);
Expand Down

0 comments on commit 39ef74a

Please sign in to comment.