diff --git a/database_info.c b/database_info.c index 4a316081d0..cf480f6e74 100644 --- a/database_info.c +++ b/database_info.c @@ -227,11 +227,20 @@ static int database_cursor_open(libretrodb_t *db, strlen(query), &error); if (error) - return -1; + goto error; if ((libretrodb_cursor_open(db, cur, q)) != 0) - return -1; + goto error; return 0; + +error: + if (query) + libretrodb_query_free(q); + query = NULL; + libretrodb_close(db); + db = NULL; + + return -1; } static int database_cursor_close(libretrodb_t *db, libretrodb_cursor_t *cur) diff --git a/libretro-db/libretrodb.c b/libretro-db/libretrodb.c index 5651e2bbba..53fa6085e4 100644 --- a/libretro-db/libretrodb.c +++ b/libretro-db/libretrodb.c @@ -141,6 +141,9 @@ static void libretrodb_write_index_header(int fd, libretrodb_index_t * idx) void libretrodb_close(libretrodb_t *db) { + if (!db) + return; + close(db->fd); db->fd = -1; }