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 # IntelliJ
.idea .idea

View File

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

View File

@ -26,10 +26,10 @@ EXPORT_FUNCS = \
--export=sqlite3_column_name_,$\ --export=sqlite3_column_name_,$\
--export=sqlite3_step,$\ --export=sqlite3_step,$\
--export=sqlite3_reset,$\ --export=sqlite3_reset,$\
--export=sqlite3_bind_blob,$\ --export=sqlite3_bind_blob_,$\
--export=sqlite3_bind_double,$\ --export=sqlite3_bind_double,$\
--export=sqlite3_bind_int64,$\ --export=sqlite3_bind_int64,$\
--export=sqlite3_bind_text,$\ --export=sqlite3_bind_text_,$\
--export=sqlite3_bind_null,$\ --export=sqlite3_bind_null,$\
--export=sqlite3_column_count,$\ --export=sqlite3_column_count,$\
--export=sqlite3_column_double,$\ --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. ** Bind a blob value to an SQL statement variable.
*/ */
int sqlite3_bind_blob(sqlite3_stmt *pStmt, int i, const void *zData, int nData, #ifndef __sqlite_unmodified_upstream
void (*xDel)(void *)) { 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 #ifdef SQLITE_ENABLE_API_ARMOR
if (nData < 0) if (nData < 0)
return SQLITE_MISUSE_BKPT; return SQLITE_MISUSE_BKPT;
#endif #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 // 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. // due to our IT architecture it can't be provided from other modules.
return bindText(pStmt, i, zData, nData, // However the memory zData uses has to be cleaned up eventually.
(xDel==SQLITE_STATIC || xDel==SQLITE_TRANSIENT)?xDel:free, 0); add_object_to_release((void*)zData);
return bindText(pStmt, i, zData, nData, xDel, 0);
}
#endif #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, int sqlite3_bind_blob64(sqlite3_stmt *pStmt, int i, const void *zData,
sqlite3_uint64 nData, void (*xDel)(void *)) { sqlite3_uint64 nData, void (*xDel)(void *)) {
@ -1594,17 +1603,24 @@ int sqlite3_bind_pointer(sqlite3_stmt *pStmt, int i, void *pPtr,
} }
return rc; return rc;
} }
int sqlite3_bind_text(sqlite3_stmt *pStmt, int i, const char *zData, int nData, int sqlite3_bind_text(sqlite3_stmt *pStmt, int i, const char *zData, int nData,
void (*xDel)(void *)) { void (*xDel)(void *)) {
#ifdef __sqlite_unmodified_upstream
return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8); 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 // 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. // due to our IT architecture it can't be provided from other modules.
return bindText(pStmt, i, zData, nData, // However the memory zData uses has to be cleaned up eventually.
(xDel==SQLITE_STATIC || xDel==SQLITE_TRANSIENT)?xDel:free, SQLITE_UTF8); add_object_to_release((void*)zData);
#endif return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
} }
#endif
int sqlite3_bind_text64(sqlite3_stmt *pStmt, int i, const char *zData, int sqlite3_bind_text64(sqlite3_stmt *pStmt, int i, const char *zData,
sqlite3_uint64 nData, void (*xDel)(void *), sqlite3_uint64 nData, void (*xDel)(void *),
unsigned char enc) { unsigned char enc) {

View File

@ -1 +1 @@
0.18.0 0.18.1