Skip to content

Commit c1eaa80

Browse files
committed
fix: database_* functions must call cloudsync_memory_* functions instead of direct sqlite3_* memory function to support the memory debugger module
call cloudsync_memory_mprintf and cloudsync_memory_free instead of direct sqlite3_mprintf and sqlite3_free memory functions from database_create_insert_trigger otherwise the memory debugger would report "Pointer being freed was not previously allocated."
1 parent fa710d3 commit c1eaa80

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

src/database_sqlite.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ int database_create_insert_trigger (db_t *db, const char *table_name, char *trig
317317
if (rc != SQLITE_OK) return rc;
318318
char *pkvalues = (pkclause) ? pkclause : "NEW.rowid";
319319

320-
char *sql = sqlite3_mprintf("CREATE TRIGGER \"%w\" AFTER INSERT ON \"%w\" %s BEGIN SELECT cloudsync_insert('%q', %s); END", trigger_name, table_name, trigger_when, table_name, pkvalues);
320+
char *sql = cloudsync_memory_mprintf("CREATE TRIGGER \"%w\" AFTER INSERT ON \"%w\" %s BEGIN SELECT cloudsync_insert('%q', %s); END", trigger_name, table_name, trigger_when, table_name, pkvalues);
321321
if (pkclause) cloudsync_memory_free(pkclause);
322322
if (!sql) return SQLITE_NOMEM;
323323

@@ -376,13 +376,13 @@ int database_create_update_trigger (db_t *db, const char *table_name, const char
376376
char *values_query = NULL;
377377
if (col_values_list && strlen(col_values_list) > 0) {
378378
// Table has both primary keys and regular columns
379-
values_query = sqlite3_mprintf(
379+
values_query = cloudsync_memory_mprintf(
380380
"WITH column_data(table_name, new_value, old_value) AS (VALUES %s, %s) "
381381
"SELECT table_name, new_value, old_value FROM column_data",
382382
pk_values_list, col_values_list);
383383
} else {
384384
// Table has only primary keys
385-
values_query = sqlite3_mprintf(
385+
values_query = cloudsync_memory_mprintf(
386386
"WITH column_data(table_name, new_value, old_value) AS (VALUES %s) "
387387
"SELECT table_name, new_value, old_value FROM column_data",
388388
pk_values_list);
@@ -393,18 +393,18 @@ int database_create_update_trigger (db_t *db, const char *table_name, const char
393393
if (!values_query) return SQLITE_NOMEM;
394394

395395
// create the trigger with aggregate function
396-
char *sql = sqlite3_mprintf(
396+
char *sql = cloudsync_memory_mprintf(
397397
"CREATE TRIGGER \"%w\" AFTER UPDATE ON \"%w\" %s BEGIN "
398398
"SELECT cloudsync_update(table_name, new_value, old_value) FROM (%s); "
399399
"END",
400400
trigger_name, table_name, trigger_when, values_query);
401401

402-
sqlite3_free(values_query);
402+
cloudsync_memory_free(values_query);
403403
if (!sql) return SQLITE_NOMEM;
404404

405405
rc = database_exec(db, sql);
406406
DEBUG_SQL("\n%s", sql);
407-
sqlite3_free(sql);
407+
cloudsync_memory_free(sql);
408408
return rc;
409409
}
410410

@@ -439,13 +439,13 @@ int database_create_delete_trigger (db_t *db, const char *table_name, const char
439439
if (rc != SQLITE_OK) return rc;
440440
char *pkvalues = (pkclause) ? pkclause : "OLD.rowid";
441441

442-
char *sql = sqlite3_mprintf("CREATE TRIGGER \"%w\" AFTER DELETE ON \"%w\" %s BEGIN SELECT cloudsync_delete('%q',%s); END", trigger_name, table_name, trigger_when, table_name, pkvalues);
442+
char *sql = cloudsync_memory_mprintf("CREATE TRIGGER \"%w\" AFTER DELETE ON \"%w\" %s BEGIN SELECT cloudsync_delete('%q',%s); END", trigger_name, table_name, trigger_when, table_name, pkvalues);
443443
if (pkclause) cloudsync_memory_free(pkclause);
444444
if (!sql) return SQLITE_NOMEM;
445445

446446
rc = database_exec(db, sql);
447447
DEBUG_SQL("\n%s", sql);
448-
sqlite3_free(sql);
448+
cloudsync_memory_free(sql);
449449
return rc;
450450
}
451451

0 commit comments

Comments
 (0)