summaryrefslogtreecommitdiffstats
path: root/meta/recipes-extended/libarchive/libarchive/0003-Patch-from-upstream-rev-2516.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-extended/libarchive/libarchive/0003-Patch-from-upstream-rev-2516.patch')
-rw-r--r--meta/recipes-extended/libarchive/libarchive/0003-Patch-from-upstream-rev-2516.patch63
1 files changed, 63 insertions, 0 deletions
diff --git a/meta/recipes-extended/libarchive/libarchive/0003-Patch-from-upstream-rev-2516.patch b/meta/recipes-extended/libarchive/libarchive/0003-Patch-from-upstream-rev-2516.patch
new file mode 100644
index 0000000000..0193a07d19
--- /dev/null
+++ b/meta/recipes-extended/libarchive/libarchive/0003-Patch-from-upstream-rev-2516.patch
@@ -0,0 +1,63 @@
1libarchive: Backport patch from upstream (rev 2516)
2
3Fix Issue 100: Allow a zero for the Type M Path Table Location, since
4WinISO (and probably other programs) set it this way.
5
6http://code.google.com/p/libarchive/source/detail?r=2516
7
8Upstream-Status: Backport
9
10Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
11
12diff --git a/libarchive/archive_read_support_format_iso9660.c b/libarchive/archive_read_support_format_iso9660.c
13index 0c640c8..fdef3fb 100644
14--- a/libarchive/archive_read_support_format_iso9660.c
15+++ b/libarchive/archive_read_support_format_iso9660.c
16@@ -714,11 +714,13 @@ isSVD(struct iso9660 *iso9660, const unsigned char *h)
17 if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block)
18 return (0);
19
20- /* Location of Occurrence of Type M Path Table must be
21- * available location,
22+ /* The Type M Path Table must be at a valid location (WinISO
23+ * and probably other programs omit this, so we allow zero)
24+ *
25 * > SYSTEM_AREA_BLOCK(16) + 2 and < Volume Space Size. */
26 location = archive_be32dec(h+SVD_type_M_path_table_offset);
27- if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block)
28+ if ((location > 0 && location <= SYSTEM_AREA_BLOCK+2)
29+ || location >= volume_block)
30 return (0);
31
32 /* Read Root Directory Record in Volume Descriptor. */
33@@ -790,7 +792,8 @@ isEVD(struct iso9660 *iso9660, const unsigned char *h)
34 * available location,
35 * > SYSTEM_AREA_BLOCK(16) + 2 and < Volume Space Size. */
36 location = archive_be32dec(h+PVD_type_m_path_table_offset);
37- if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block)
38+ if ((location > 0 && location <= SYSTEM_AREA_BLOCK+2)
39+ || location >= volume_block)
40 return (0);
41
42 /* Reserved field must be 0. */
43@@ -865,11 +868,14 @@ isPVD(struct iso9660 *iso9660, const unsigned char *h)
44 if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block)
45 return (0);
46
47- /* Location of Occurrence of Type M Path Table must be
48- * available location,
49+ /* The Type M Path Table must also be at a valid location
50+ * (although ECMA 119 requires a Type M Path Table, WinISO and
51+ * probably other programs omit it, so we permit a zero here)
52+ *
53 * > SYSTEM_AREA_BLOCK(16) + 2 and < Volume Space Size. */
54 location = archive_be32dec(h+PVD_type_m_path_table_offset);
55- if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block)
56+ if ((location > 0 && location <= SYSTEM_AREA_BLOCK+2)
57+ || location >= volume_block)
58 return (0);
59
60 /* Reserved field must be 0. */
61--
621.7.1
63