]> pd.if.org Git - zpackage/blob - lib/dbquery.c
fix potential use after free
[zpackage] / lib / dbquery.c
1 #include <stdarg.h>
2 #include <string.h>
3
4 #include "sqlite3.h"
5 #include "zpm.h"
6
7 #define SQLERROR(x) fprintf(stderr, "%s %d: %s\n", __func__, __LINE__, (x))
8 sqlite3_stmt *zpm_dbquery(struct zpm *zpm, char *query, ...) {
9         sqlite3 *db;
10         char *sql;
11         va_list args;
12         sqlite3_stmt *st;
13         int rv;
14
15         if (!zpm || zpm->error) {
16                 return 0;
17         }
18
19         if (!zpm->db) {
20                 zpm->error = 1;
21                 return 0;
22         }
23
24         db = zpm->db;
25
26         va_start(args, query);
27         sql = sqlite3_vmprintf(query, args);
28         va_end(args);
29
30         if (!sql) {
31                 zpm->error = 1;
32                 return 0;
33         }
34
35         rv = sqlite3_prepare_v2(db, sql, strlen(sql), &st, NULL);
36         if (rv != SQLITE_OK) {
37                 SQLERROR(sqlite3_errmsg(db));
38                 zpm->error = rv;
39                 return 0;
40         }
41
42         return st;
43 }