Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed heap corruption in windows using duckdb.dll #131

Merged

Conversation

rrgilchrist
Copy link
Contributor

@rrgilchrist rrgilchrist commented Nov 27, 2023

Problem

There is heap corruption in windows using duckdb.dll caused by freeing memory in wrong module. On successfully opening a connection to duckdb, go-duckdb attempts to free the errMsg empty cgo string allocated in the golang executable by calling the duckdb_free(...) cgo wrapper func for duckdb.dll. This causes heap corruption and immediately panics. On connection error, duckdb.dll allocates the string for the error message so duckdb_free(...) correctly frees the memory.

Issue #24 appears to report this heap corruption.

Fix

duckdb_free(...) ultimately calls free(...) in duckdb.dll which safely handles null pointers (observed and documented) so easy fix was to just not allocate an empty string using C.String and leave it as null. Error messages continue to be allocated normally on connection error.

@marcboeker marcboeker merged commit a51a20b into marcboeker:master Nov 29, 2023
2 checks passed
@marcboeker
Copy link
Owner

Thanks @rrgilchrist for the fix!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants