From: Michihiro NAKAJIMA Date: Mon, 21 Nov 2011 02:10:57 +0000 (-0500) Subject: Merge r3823 from trunk for issue 199. X-Git-Tag: v3.0.4~2^2~169^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=215f386f8c7519aee10982b67d9dc31c22ef0f2f;p=thirdparty%2Flibarchive.git Merge r3823 from trunk for issue 199. SVN-Revision: 3824 --- diff --git a/libarchive/archive_read_support_format_iso9660.c b/libarchive/archive_read_support_format_iso9660.c index 813df7a46..f35f0ea80 100644 --- a/libarchive/archive_read_support_format_iso9660.c +++ b/libarchive/archive_read_support_format_iso9660.c @@ -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);