Fix a potential invalid double free memory (#18905)
Make sure err_msg is always initialized
Stelios Fragkakis committed
Oct 31, 2024 at 19:29 UTC
84f7f5a986b05b089f2ec17467937811286a931b
1 file changed
+5
-3
src/database/sqlite/sqlite_functions.c
+5
-3
@@ -252,14 +252,16 @@ int db_execute(sqlite3 *db, const char *cmd)
252
int cnt = 0;
253
254
while (cnt < SQL_MAX_RETRY) {
255
- char *err_msg;
255
+ char *err_msg = NULL;
256
rc = sqlite3_exec_monitored(db, cmd, 0, 0, &err_msg);
257
if (likely(rc == SQLITE_OK))
258
break;
259
260
++cnt;
261
- error_report("Failed to execute '%s', rc = %d (%s) -- attempt %d", cmd, rc, err_msg, cnt);
262
- sqlite3_free(err_msg);
261
+ error_report("Failed to execute '%s', rc = %d (%s) -- attempt %d", cmd, rc, err_msg ? err_msg : "unknown", cnt);
262
+ if (err_msg) {
263
+ sqlite3_free(err_msg);
264
+ }
265
266
if (likely(rc == SQLITE_BUSY || rc == SQLITE_LOCKED)) {
267
usleep(SQLITE_INSERT_DELAY * USEC_PER_MS);