From 917344cf17042680a67f4dce680dd0f7b269e183 Mon Sep 17 00:00:00 2001 From: shermp <14854761+shermp@users.noreply.github.com> Date: Sat, 15 Jun 2019 16:22:29 +1200 Subject: [PATCH] Guard against NULL pointer dereference in mvhd_close --- src/minivhd_manage.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/minivhd_manage.c b/src/minivhd_manage.c index 083098c..9900e44 100644 --- a/src/minivhd_manage.c +++ b/src/minivhd_manage.c @@ -540,24 +540,26 @@ end: * \param [in] vhdm MiniVHD data structure to close */ void mvhd_close(MVHDMeta* vhdm) { - if (vhdm->parent != NULL) { - mvhd_close(vhdm->parent); + if (vhdm != NULL) { + if (vhdm->parent != NULL) { + mvhd_close(vhdm->parent); + } + fclose(vhdm->f); + if (vhdm->block_offset != NULL) { + free(vhdm->block_offset); + vhdm->block_offset = NULL; + } + if (vhdm->bitmap.curr_bitmap != NULL) { + free(vhdm->bitmap.curr_bitmap); + vhdm->bitmap.curr_bitmap = NULL; + } + if (vhdm->format_buffer.zero_data != NULL) { + free(vhdm->format_buffer.zero_data); + vhdm->format_buffer.zero_data = NULL; + } + free(vhdm); + vhdm = NULL; } - fclose(vhdm->f); - if (vhdm->block_offset != NULL) { - free(vhdm->block_offset); - vhdm->block_offset = NULL; - } - if (vhdm->bitmap.curr_bitmap != NULL) { - free(vhdm->bitmap.curr_bitmap); - vhdm->bitmap.curr_bitmap = NULL; - } - if (vhdm->format_buffer.zero_data != NULL) { - free(vhdm->format_buffer.zero_data); - vhdm->format_buffer.zero_data = NULL; - } - free(vhdm); - vhdm = NULL; } /**