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