diff --git a/libretro-common/file/archive_file.c b/libretro-common/file/archive_file.c index 2aeeb6bee3..0464ffbfab 100644 --- a/libretro-common/file/archive_file.c +++ b/libretro-common/file/archive_file.c @@ -572,19 +572,13 @@ struct string_list *file_archive_get_file_list(const char *path, goto error; if (userdata.archive_path) - { free(userdata.archive_path); - userdata.archive_path = NULL; - } return userdata.list; error: if (userdata.archive_path) - { free(userdata.archive_path); - userdata.archive_path = NULL; - } if (userdata.list) string_list_free(userdata.list); return NULL; diff --git a/tasks/task_database.c b/tasks/task_database.c index ca58a6fab2..efccf67845 100644 --- a/tasks/task_database.c +++ b/tasks/task_database.c @@ -414,14 +414,22 @@ static int task_database_iterate_playlist_archive( strlcpy(userdata.archive_name, db_state->archive_name, sizeof(userdata.archive_name)); userdata.crc = db_state->crc; + userdata.archive_path = strdup(name); if (file_archive_parse_file_iterate(&db->state, &returnerr, name, NULL, archive_compare_crc32, &userdata)) + { + if (userdata.archive_path) + free(userdata.archive_path); return 0; + } if (db_state->crc) file_archive_parse_file_iterate_stop(&db->state); + + if (userdata.archive_path) + free(userdata.archive_path); #endif return 1;