From 0dc09cbcb6ad7190bcd92261f033cafab5f2b867 Mon Sep 17 00:00:00 2001 From: Ann Priestman <apriestman@basistech.com> Date: Wed, 17 Jan 2018 12:22:08 -0500 Subject: [PATCH] Add check that the extended partition has not already been added --- tsk/vs/dos.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tsk/vs/dos.c b/tsk/vs/dos.c index 06e95027b..f4a07b745 100644 --- a/tsk/vs/dos.c +++ b/tsk/vs/dos.c @@ -751,6 +751,25 @@ dos_load_ext_table(TSK_VS_INFO * vs, TSK_DADDR_T sect_cur, * in extended partitions */ if (dos_is_ext(part->ptype)) { + TSK_VS_PART_INFO *part_info; + + /* Sanity check to prevent infinite recursion in dos_load_ext_table. + * If we already have a partition with this starting address then + * return an error. This will prevent any more partitions from being + * added but will leave any existing partitions alone. */ + part_info = vs->part_list; + while (part_info != NULL) { + if (part_info->start == (TSK_DADDR_T)(sect_ext_base + part_start)) { + if (tsk_verbose) + tsk_fprintf(stderr, + "Starting sector %" PRIuDADDR + " of extended partition has already been used\n", + (TSK_DADDR_T)(sect_ext_base + part_start)); + return 1; + } + part_info = part_info->next; + } + /* part start is added to the start of the * first extended partition (the primary * extended partition) */ -- GitLab