]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Issue 224:Mishandling CD9660 images with RockRidge extensions from FreeBSD makefs.
authorMichihiro NAKAJIMA <ggcueroad@gmail.com>
Thu, 19 Jan 2012 08:11:29 +0000 (03:11 -0500)
committerMichihiro NAKAJIMA <ggcueroad@gmail.com>
Thu, 19 Jan 2012 08:11:29 +0000 (03:11 -0500)
A file size of the symblic link file in ISO images made by makefs is not zero and
its location is not negative. That makes ISO reader misleading that that file is
a hard like file.
We have to check if the file type is symbolic like or not, if so and its file size
is not zero, reset the file size to zero and also reset the location to -1.

SVN-Revision: 4181

libarchive/archive_read_support_format_iso9660.c

index 942dfe253913bab011b4d341e4b0116f426d8670..da0fec7ccaccad548e910f07d9823169ed8b51fc 100644 (file)
@@ -1907,6 +1907,19 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
                                free(file);
                                return (NULL);
                        }
+                       /*
+                        * A file size of symbolic link files in ISO images
+                        * made by makefs is not zero and its location is
+                        * the same as those of next regular file. That is
+                        * the same as hard like file and it causes unexpected
+                        * error. 
+                        */
+                       if (file->size > 0 &&
+                           (file->mode & AE_IFMT) == AE_IFLNK) {
+                               file->size = 0;
+                               file->number = -1;
+                               file->offset = -1;
+                       }
                } else
                        /* If there isn't SUSP, disable parsing
                         * rock ridge extensions. */