fix: bind_text and bind_blob string arguments clean up (#18)

This commit is contained in:
raftedproc 2023-04-06 13:42:33 +03:00 committed by GitHub
parent 8a97f5ca7b
commit 258b8d11b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 33 additions and 17 deletions

2
.gitignore vendored
View File

@ -1,4 +1,4 @@
wasi-sdk
wasi-sdk*
# IntelliJ
.idea

View File

@ -10,7 +10,7 @@ RUN apt update \
libtinfo6 \
cargo
RUN cargo install marine
RUN cargo install marine --version 0.12.7
VOLUME /code
WORKDIR /code

View File

@ -26,10 +26,10 @@ EXPORT_FUNCS = \
--export=sqlite3_column_name_,$\
--export=sqlite3_step,$\
--export=sqlite3_reset,$\
--export=sqlite3_bind_blob,$\
--export=sqlite3_bind_blob_,$\
--export=sqlite3_bind_double,$\
--export=sqlite3_bind_int64,$\
--export=sqlite3_bind_text,$\
--export=sqlite3_bind_text_,$\
--export=sqlite3_bind_null,$\
--export=sqlite3_column_count,$\
--export=sqlite3_column_double,$\

View File

@ -1528,21 +1528,30 @@ static int bindText(sqlite3_stmt *pStmt, /* The statement to bind against */
/*
** Bind a blob value to an SQL statement variable.
*/
int sqlite3_bind_blob(sqlite3_stmt *pStmt, int i, const void *zData, int nData,
void (*xDel)(void *)) {
#ifndef __sqlite_unmodified_upstream
int sqlite3_bind_blob_(sqlite3_stmt *pStmt, int i, const void *zData, int nData,
void (*xDel)(void *))
__attribute__((export_name("sqlite3_bind_blob"))) {
#ifdef SQLITE_ENABLE_API_ARMOR
if (nData < 0)
return SQLITE_MISUSE_BKPT;
#endif
#ifdef __sqlite_unmodified_upstream
return bindText(pStmt, i, zData, nData, xDel, 0);
#else
// xDel is a custom deallocator and if it is not SQLITE_STATIC
// due to our IT architecture it can't be provided from other modules.
return bindText(pStmt, i, zData, nData,
(xDel==SQLITE_STATIC || xDel==SQLITE_TRANSIENT)?xDel:free, 0);
// However the memory zData uses has to be cleaned up eventually.
add_object_to_release((void*)zData);
return bindText(pStmt, i, zData, nData, xDel, 0);
}
#endif
int sqlite3_bind_blob(sqlite3_stmt *pStmt, int i, const void *zData, int nData,
void (*xDel)(void *)) {
#ifdef SQLITE_ENABLE_API_ARMOR
if (nData < 0) return SQLITE_MISUSE_BKPT;
#endif
return bindText(pStmt, i, zData, nData, xDel, 0);
}
int sqlite3_bind_blob64(sqlite3_stmt *pStmt, int i, const void *zData,
sqlite3_uint64 nData, void (*xDel)(void *)) {
@ -1594,17 +1603,24 @@ int sqlite3_bind_pointer(sqlite3_stmt *pStmt, int i, void *pPtr,
}
return rc;
}
int sqlite3_bind_text(sqlite3_stmt *pStmt, int i, const char *zData, int nData,
void (*xDel)(void *)) {
#ifdef __sqlite_unmodified_upstream
return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
#else
}
#ifndef __sqlite_unmodified_upstream
int sqlite3_bind_text_(sqlite3_stmt *pStmt, int i, const char *zData, int nData,
void (*xDel)(void *))
__attribute__((export_name("sqlite3_bind_text"))) {
// xDel is a custom deallocator and if it is not SQLITE_STATIC
// due to our IT architecture it can't be provided from other modules.
return bindText(pStmt, i, zData, nData,
(xDel==SQLITE_STATIC || xDel==SQLITE_TRANSIENT)?xDel:free, SQLITE_UTF8);
#endif
// However the memory zData uses has to be cleaned up eventually.
add_object_to_release((void*)zData);
return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
}
#endif
int sqlite3_bind_text64(sqlite3_stmt *pStmt, int i, const char *zData,
sqlite3_uint64 nData, void (*xDel)(void *),
unsigned char enc) {

View File

@ -1 +1 @@
0.18.0
0.18.1