diff --git a/src/database/config.c b/src/database/config.c index d931f9eebc11192dbef3727d6b8f11882775aae7..9dba758018efca89ae3a429041cd9b9783181e36 100644 --- a/src/database/config.c +++ b/src/database/config.c @@ -144,7 +144,7 @@ bool database_config_queue(sqlite3 *db, const char *option, int value) { static const char *SQL_STMT_TMP = "UPDATE queue_state SET %s = ? WHERE id = 42;"; - char SQL_STMT[PATH_MAX]; + char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; sqlite3_stmt *stmt = 0; bool ret = false; int code; @@ -154,7 +154,8 @@ database_config_queue(sqlite3 *db, const char *option, int value) if (value > 100) value = 100; - snprintf(SQL_STMT, PATH_MAX, SQL_STMT_TMP, option); + snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT_TMP, option); + SQL_STMT[LKT_MAX_SQLITE_STATEMENT - 1] = 0; SQLITE_PREPARE(db, stmt, SQL_STMT, error); if (sqlite3_bind_int(stmt, 1, value) != SQLITE_OK) @@ -183,9 +184,7 @@ database_config_queue_default(sqlite3 *db) " single = 0," " consume = 0," " current = NULL," - " duration = 0;" - ; - + " duration = 0;"; SQLITE_EXEC(db, SQL_DEFAULT, error); return true; error: @@ -196,11 +195,12 @@ bool database_get_config(sqlite3 *db, const char *option, int *value) { static const char *SQL_STMT_TMP = "SELECT %s FROM queue_state WHERE id = 42;"; - char SQL_STMT[PATH_MAX]; + char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; sqlite3_stmt *stmt = 0; bool ret = false; - snprintf(SQL_STMT, PATH_MAX, SQL_STMT_TMP, option); + snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT_TMP, option); + SQL_STMT[LKT_MAX_SQLITE_STATEMENT - 1] = 0; SQLITE_PREPARE(db, stmt, SQL_STMT, error); if (sqlite3_step(stmt) != SQLITE_ROW) diff --git a/src/database/find.c b/src/database/find.c index d49dce80d65e05334372a68c50a3172dbf76f722..63e490b646dda30b620c2a1c535d5e55a62538b6 100644 --- a/src/database/find.c +++ b/src/database/find.c @@ -22,10 +22,10 @@ database_search_init(sqlite3 *db, char *col_name, char *rgx, sqlite3_stmt **ret) " kara.id AS id, " " string AS any_col" "FROM kara WHERE %s LIKE ?;"; - char SQL_STMT[PATH_MAX]; + char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; - memset(SQL_STMT, 0, PATH_MAX); - snprintf(SQL_STMT, PATH_MAX, SQL_STMT_TEMPLATE, col_name); + snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT_TEMPLATE, col_name); + SQL_STMT[LKT_MAX_SQLITE_STATEMENT - 1] = 0; SQLITE_PREPARE(db, *ret, SQL_STMT, error); if (sqlite3_bind_text(*ret, 1, rgx, -1, 0) != SQLITE_OK) { diff --git a/src/database/open.c b/src/database/open.c index 50e848d2f5e44ce493d87cba0db1cba75038f54a..5d70fae207aaedbf02a321ee7fdf132ff1e8143a 100644 --- a/src/database/open.c +++ b/src/database/open.c @@ -89,16 +89,15 @@ static inline bool __attach(sqlite3 *db, const char *name, const char *path) { static const char SQL_ATTACH_TEMPLATE[] = "ATTACH '%s' AS '%s';"; - size_t len = strlen(path) + strlen(name) + (sizeof(SQL_ATTACH_TEMPLATE) / sizeof(char)); - char *SQL_ATTACH = (char *) calloc(len, sizeof(char)); + char SQL_ATTACH[LKT_MAX_SQLITE_STATEMENT]; bool ret = false; - snprintf(SQL_ATTACH, len - 1, SQL_ATTACH_TEMPLATE, path, name); + snprintf(SQL_ATTACH, LKT_MAX_SQLITE_STATEMENT - 1, SQL_ATTACH_TEMPLATE, path, name); + SQL_ATTACH[LKT_MAX_SQLITE_STATEMENT - 1] = 0; SQLITE_EXEC(db, SQL_ATTACH, err_no_attach); fprintf(stderr, " * Attached database '%s' with path '%s'\n", name, path); ret = true; err_no_attach: - free(SQL_ATTACH); return ret; } @@ -106,16 +105,15 @@ static inline bool __detach(sqlite3 *db, const char *name) { static const char SQL_DETACH_TEMPLATE[] = "DETACH '%s';\n"; - size_t len = strlen(name) + (sizeof(SQL_DETACH_TEMPLATE) / sizeof(char)); - char *SQL_DETACH = (char *) calloc(len, sizeof(char)); + char SQL_DETACH[LKT_MAX_SQLITE_STATEMENT]; bool ret = false; - snprintf(SQL_DETACH, len - 1, SQL_DETACH_TEMPLATE, name); + snprintf(SQL_DETACH, LKT_MAX_SQLITE_STATEMENT - 1, SQL_DETACH_TEMPLATE, name); + SQL_DETACH[LKT_MAX_SQLITE_STATEMENT - 1] = 0; SQLITE_EXEC(db, SQL_DETACH, err_no_detach); fprintf(stderr, " * Detached database '%s'\n", name); ret = true; err_no_detach: - free(SQL_DETACH); return ret; } diff --git a/src/database/playlist.c b/src/database/playlist.c index 65f3a34d606dd4d9ebb8d1fef779899743b525ac..f29575b9c9a7d7ff3de28dd52eea5b39e859a10e 100644 --- a/src/database/playlist.c +++ b/src/database/playlist.c @@ -153,7 +153,7 @@ database_plt_export(sqlite3 *db, const char *name) static const char *SQL_SCHEM = "CREATE TABLE IF NOT EXISTS %s.content" "( kara_id INTEGER PRIMARY KEY NOT NULL CHECK(kara_id > 0) );"; - char SQL_STMT[1024]; + char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; int code, ret = false; sqlite3_stmt *stmt; @@ -193,7 +193,7 @@ database_plt_import(sqlite3 *db, const char *name) "INSERT OR IGNORE INTO kara_playlist (kara_id, playlist_id)" " SELECT %s.content.kara_id, ( SELECT id FROM playlist WHERE name = %s LIMIT 1 )" " FROM %s.content;\n"; - char SQL_STMT[1024]; + char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; int code, ret = false; sqlite3_stmt *stmt; @@ -236,7 +236,7 @@ database_plt_add_uri(sqlite3 *db, const char *name, struct lkt_uri_t *uri) " FROM kara, plt_id " " WHERE kara.%s LIKE ? " " ORDER BY RANDOM();"; - char SQL_STMT[1024], sta = false; + char SQL_STMT[LKT_MAX_SQLITE_STATEMENT], sta = false; const char *column; sqlite3_stmt *stmt; @@ -261,8 +261,8 @@ database_plt_add_uri(sqlite3 *db, const char *name, struct lkt_uri_t *uri) return false; } - snprintf(SQL_STMT, 1024, SQL, column); - + snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL, column); + SQL_STMT[LKT_MAX_SQLITE_STATEMENT - 1] = 0; SQLITE_PREPARE(db, stmt, SQL_STMT, error); if (sqlite3_bind_text(stmt, 1, name, -1, 0) != SQLITE_OK || diff --git a/src/database/queue.c b/src/database/queue.c index 37e7125f03f3c465cbbbd5ee5543eeb720392ba3..b6b61ec9e3b81e4ec872638a8476666f0d7666df 100644 --- a/src/database/queue.c +++ b/src/database/queue.c @@ -94,7 +94,7 @@ queue_add_with_col_like_str(sqlite3 *db, const char *col, const char *val, int p return false; } - char SQL[1024]; + char SQL[LKT_MAX_SQLITE_STATEMENT]; static const char *SQL_STMT = "INSERT INTO queue (kara_id, priority)" " SELECT id, ?" @@ -104,7 +104,8 @@ queue_add_with_col_like_str(sqlite3 *db, const char *col, const char *val, int p bool status = false; sqlite3_stmt *stmt = NULL; - snprintf(SQL, 1024, SQL_STMT, col); + snprintf(SQL, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT, col); + SQL[LKT_MAX_SQLITE_STATEMENT - 1] = 0; SQLITE_PREPARE(db, stmt, SQL, error); if (sqlite3_bind_int(stmt, 1, priority) != SQLITE_OK || @@ -134,7 +135,7 @@ queue_insert_with_col_like_str(sqlite3 *db, const char *col, const char *val, in return false; } - char SQL[4096]; + char SQL[LKT_MAX_SQLITE_STATEMENT]; static const char *SQL_STMT = "BEGIN TRANSACTION;" "CREATE TEMPORARY TABLE queue_tmp" @@ -161,7 +162,8 @@ queue_insert_with_col_like_str(sqlite3 *db, const char *col, const char *val, in bool status = false; sqlite3_stmt *stmt = NULL; - snprintf(SQL, 1024, SQL_STMT, col); + snprintf(SQL, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT, col); + SQL[LKT_MAX_SQLITE_STATEMENT - 1] = 0; SQLITE_PREPARE(db, stmt, SQL, error); if (sqlite3_bind_int(stmt, 1, pos) != SQLITE_OK || @@ -368,7 +370,7 @@ database_queue_next(sqlite3 *db, char filepath[PATH_MAX]) " ELSE position > current END)" " ORDER BY CASE WHEN (SELECT random FROM queue_state LIMIT 1) = 1 THEN RANDOM() ELSE 2 END" " LIMIT 1"; - char SQL_UPDATE[PATH_MAX]; + char SQL_UPDATE[LKT_MAX_SQLITE_STATEMENT]; bool status = false; int code = SQLITE_OK, id; sqlite3_stmt *stmt = NULL; @@ -379,7 +381,8 @@ database_queue_next(sqlite3 *db, char filepath[PATH_MAX]) if (code == SQLITE_ROW) { id = MAX(1, sqlite3_column_int(stmt, 1)); - snprintf(SQL_UPDATE, PATH_MAX, "UPDATE queue_state SET current = %d;", id); + snprintf(SQL_UPDATE, LKT_MAX_SQLITE_STATEMENT - 1, "UPDATE queue_state SET current = %d;", id); + SQL_UPDATE[LKT_MAX_SQLITE_STATEMENT - 1] = 0; if (filepath != NULL) strncpy(filepath, (const char *) sqlite3_column_text(stmt, 0), PATH_MAX); @@ -429,7 +432,7 @@ database_queue_prev(sqlite3 *db, char filepath[PATH_MAX]) " ELSE queue_.position < queue_state.current" " END" " ORDER BY position DESC LIMIT 1;"; - char SQL_UPDATE[PATH_MAX]; + char SQL_UPDATE[LKT_MAX_SQLITE_STATEMENT]; bool status = false; int code = SQLITE_OK, id; sqlite3_stmt *stmt = NULL; @@ -439,7 +442,8 @@ database_queue_prev(sqlite3 *db, char filepath[PATH_MAX]) if (code == SQLITE_ROW) { id = MAX(1, sqlite3_column_int(stmt, 1)); - snprintf(SQL_UPDATE, PATH_MAX, "UPDATE queue_state SET current = %d;", id); + snprintf(SQL_UPDATE, LKT_MAX_SQLITE_STATEMENT - 1, "UPDATE queue_state SET current = %d;", id); + SQL_UPDATE[LKT_MAX_SQLITE_STATEMENT - 1] = 0; if (filepath != NULL) strncpy(filepath, (const char *) sqlite3_column_text(stmt, 0), PATH_MAX); @@ -576,18 +580,19 @@ bool database_queue_set_current_index(sqlite3 *db, int idx) { static const char *SQL_GET_TEMPLATE = "UPDATE queue_state SET current = %d;"; - char SQL_GET[4096]; + char SQL_GET[LKT_MAX_SQLITE_STATEMENT]; if (idx <= 0) { fprintf(stderr, " ! database_queue_set_current_index: an idx of %d is invalid, must be >= 0\n", idx); return false; } - if (snprintf(SQL_GET, 4096, SQL_GET_TEMPLATE, idx) < 0) { + if (snprintf(SQL_GET, LKT_MAX_SQLITE_STATEMENT - 1, SQL_GET_TEMPLATE, idx) < 0) { fprintf(stderr, " ! database_queue_set_current_index: snprintf failed\n"); return false; } + SQL_GET[LKT_MAX_SQLITE_STATEMENT - 1] = 0; SQLITE_EXEC(db, SQL_GET, error); return true; error: