aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/libarchive/libarchive/0003-Patch-from-upstream-rev-2516.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/libarchive/libarchive/0003-Patch-from-upstream-rev-2516.patch')
-rw-r--r--recipes/libarchive/libarchive/0003-Patch-from-upstream-rev-2516.patch65
1 files changed, 65 insertions, 0 deletions
diff --git a/recipes/libarchive/libarchive/0003-Patch-from-upstream-rev-2516.patch b/recipes/libarchive/libarchive/0003-Patch-from-upstream-rev-2516.patch
new file mode 100644
index 0000000000..efb6f06c6e
--- /dev/null
+++ b/recipes/libarchive/libarchive/0003-Patch-from-upstream-rev-2516.patch
@@ -0,0 +1,65 @@
+From 07cefd4d6db82e53b7bcf096be1e5e29c09de3c6 Mon Sep 17 00:00:00 2001
+From: Andreas Henriksson <andreas@fatal.se>
+Date: Thu, 1 Jul 2010 15:28:25 +0200
+Subject: [PATCH 3/7] Patch from upstream (rev 2516)
+
+Fix Issue 100: Allow a zero for the Type M Path Table Location, since
+WinISO (and probably other programs) set it this way.
+
+http://code.google.com/p/libarchive/source/detail?r=2516
+---
+ libarchive/archive_read_support_format_iso9660.c | 20 +++++++++++++-------
+ 1 files changed, 13 insertions(+), 7 deletions(-)
+
+diff --git a/libarchive/archive_read_support_format_iso9660.c b/libarchive/archive_read_support_format_iso9660.c
+index 0c640c8..fdef3fb 100644
+--- a/libarchive/archive_read_support_format_iso9660.c
++++ b/libarchive/archive_read_support_format_iso9660.c
+@@ -714,11 +714,13 @@ isSVD(struct iso9660 *iso9660, const unsigned char *h)
+ if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block)
+ return (0);
+
+- /* Location of Occurrence of Type M Path Table must be
+- * available location,
++ /* The Type M Path Table must be at a valid location (WinISO
++ * and probably other programs omit this, so we allow zero)
++ *
+ * > SYSTEM_AREA_BLOCK(16) + 2 and < Volume Space Size. */
+ location = archive_be32dec(h+SVD_type_M_path_table_offset);
+- if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block)
++ if ((location > 0 && location <= SYSTEM_AREA_BLOCK+2)
++ || location >= volume_block)
+ return (0);
+
+ /* Read Root Directory Record in Volume Descriptor. */
+@@ -790,7 +792,8 @@ isEVD(struct iso9660 *iso9660, const unsigned char *h)
+ * available location,
+ * > SYSTEM_AREA_BLOCK(16) + 2 and < Volume Space Size. */
+ location = archive_be32dec(h+PVD_type_m_path_table_offset);
+- if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block)
++ if ((location > 0 && location <= SYSTEM_AREA_BLOCK+2)
++ || location >= volume_block)
+ return (0);
+
+ /* Reserved field must be 0. */
+@@ -865,11 +868,14 @@ isPVD(struct iso9660 *iso9660, const unsigned char *h)
+ if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block)
+ return (0);
+
+- /* Location of Occurrence of Type M Path Table must be
+- * available location,
++ /* The Type M Path Table must also be at a valid location
++ * (although ECMA 119 requires a Type M Path Table, WinISO and
++ * probably other programs omit it, so we permit a zero here)
++ *
+ * > SYSTEM_AREA_BLOCK(16) + 2 and < Volume Space Size. */
+ location = archive_be32dec(h+PVD_type_m_path_table_offset);
+- if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block)
++ if ((location > 0 && location <= SYSTEM_AREA_BLOCK+2)
++ || location >= volume_block)
+ return (0);
+
+ /* Reserved field must be 0. */
+--
+1.7.1
+