test(media): cover malformed local announcements and SQLite failures
This commit is contained in:
1 parent
81fc4291db
commit
eea2b22c4e
3 files changed
+184
-6
No files matched your search
@@ -1617,19 +1617,20 @@ void media_delivery_announce_local_blocks(struct UTUN_INSTANCE* inst) {
|
||||
media_delivery_refresh_roles(inst);
|
||||
|
||||
sqlite3_stmt* st = NULL;
|
||||
if (sqlite3_prepare_v2(db, "SELECT id,media_id,block_id,chunk,chat_id FROM media_files WHERE node_id=?",
|
||||
-1, &st, NULL) != SQLITE_OK) {
|
||||
DEBUG_ERROR(DEBUG_CATEGORY_GENERAL, "%s: announce_local_blocks prepare failed: %s", MD_ID, sqlite3_errmsg(db));
|
||||
int rc = sqlite3_prepare_v2(db, "SELECT id,media_id,block_id,chunk,chat_id FROM media_files WHERE node_id=?", -1, &st, NULL);
|
||||
if (rc != SQLITE_OK) {
|
||||
DEBUG_ERROR(DEBUG_CATEGORY_MEDIA, "%s: announce_local_blocks prepare failed rc=%d: %s", MD_ID, rc, sqlite3_errmsg(db));
|
||||
return;
|
||||
}
|
||||
int rc = sqlite3_bind_int64(st, 1, (sqlite3_int64)inst->node_id);
|
||||
rc = sqlite3_bind_int64(st, 1, (sqlite3_int64)inst->node_id);
|
||||
|
||||
uint64_t rows = 0, eligible = 0, skipped = 0;
|
||||
if (rc == SQLITE_OK) while ((rc = sqlite3_step(st)) == SQLITE_ROW) {
|
||||
rows++;
|
||||
sqlite3_int64 row = sqlite3_column_int64(st, 0), chunk = sqlite3_column_int64(st, 3);
|
||||
sqlite3_int64 row = sqlite3_column_int64(st, 0);
|
||||
int media_type = sqlite3_column_type(st, 1), block_type = sqlite3_column_type(st, 2);
|
||||
int chunk_type = sqlite3_column_type(st, 3), chat_type = sqlite3_column_type(st, 4);
|
||||
sqlite3_int64 chunk = sqlite3_column_int64(st, 3);
|
||||
int media_bytes = sqlite3_column_bytes(st, 1), block_bytes = sqlite3_column_bytes(st, 2);
|
||||
int chat_bytes = sqlite3_column_bytes(st, 4);
|
||||
const uint8_t* media = media_type == SQLITE_BLOB && media_bytes == 16 ? sqlite3_column_blob(st, 1) : NULL;
|
||||
|
||||
Reference in new issue
Block a user