From 88e88e92f3850067f4710c2fd689f397e577ffbe Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 27 Oct 2016 19:50:19 +0200 Subject: [PATCH] Prevent crash with zipped roms --- libretro-common/file/archive_file.c | 8 ++++++-- libretro-common/file/archive_file_zlib.c | 26 ++++++++++-------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/libretro-common/file/archive_file.c b/libretro-common/file/archive_file.c index 39ae00131e..9b2f601d10 100644 --- a/libretro-common/file/archive_file.c +++ b/libretro-common/file/archive_file.c @@ -355,7 +355,10 @@ end: if (handle) { if (handle->backend) - handle->backend->stream_free(handle->stream); + { + if (handle->backend->stream_free) + handle->backend->stream_free(handle->stream); + } if (handle->data) free(handle->data); @@ -427,7 +430,8 @@ int file_archive_parse_file_iterate( } if (state->stream && state->backend) { - state->backend->stream_free(state->stream); + if (state->backend->stream_free) + state->backend->stream_free(state->stream); if (state->stream) free(state->stream); diff --git a/libretro-common/file/archive_file_zlib.c b/libretro-common/file/archive_file_zlib.c index 2e91cb1a6c..34297473e1 100644 --- a/libretro-common/file/archive_file_zlib.c +++ b/libretro-common/file/archive_file_zlib.c @@ -432,22 +432,18 @@ static int zip_parse_file_iterate_step_internal( } static int zip_parse_file_iterate_step(file_archive_transfer_t *state, - const char *valid_exts, struct archive_extract_userdata *userdata, file_archive_file_cb file_cb) + const char *valid_exts, struct archive_extract_userdata *userdata, + file_archive_file_cb file_cb) { - char filename[PATH_MAX_LENGTH]; - int ret; - const uint8_t *cdata = NULL; - uint32_t checksum = 0; - uint32_t size = 0; - uint32_t csize = 0; - unsigned cmode = 0; - unsigned payload = 0; - - filename[0] = '\0'; - - ret = zip_parse_file_iterate_step_internal(state, filename, - &cdata, &cmode, &size, &csize, - &checksum, &payload); + char filename[PATH_MAX_LENGTH] = {0}; + const uint8_t *cdata = NULL; + uint32_t checksum = 0; + uint32_t size = 0; + uint32_t csize = 0; + unsigned cmode = 0; + unsigned payload = 0; + int ret = zip_parse_file_iterate_step_internal( + state, filename, &cdata, &cmode, &size, &csize, &checksum, &payload); if (ret != 1) return ret;