]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Merge r3823 from trunk for issue 199.
authorMichihiro NAKAJIMA <ggcueroad@gmail.com>
Mon, 21 Nov 2011 02:10:57 +0000 (21:10 -0500)
committerMichihiro NAKAJIMA <ggcueroad@gmail.com>
Mon, 21 Nov 2011 02:10:57 +0000 (21:10 -0500)
SVN-Revision: 3824

libarchive/archive_read_support_format_iso9660.c

index 813df7a46d7d5731beecdbe11a7999d80bf0525c..f35f0ea80bf380baa38497e88955eadab93cff79 100644 (file)
@@ -302,6 +302,8 @@ struct file_info {
                struct file_info        *first;
                struct file_info        **last;
        } rede_files;
+       /* To check a ininity loop. */
+       struct file_info        *loop_by;
 };
 
 struct heap_queue {
@@ -2696,8 +2698,14 @@ rede_add_entry(struct file_info *file)
        struct file_info *re;
 
        re = file->parent;
-       while (re != NULL && !re->re)
+       while (re != NULL && !re->re) {
+               /* Sanity check to prevent a infinity loop
+                * cause by a currupted iso file. */
+               if (re->loop_by == file)
+                       return (-1);
+               re->loop_by = file;
                re = re->parent;
+       }
        if (re == NULL)
                return (-1);