Skip to content

Commit e7c5d1c

Browse files
authored
Merge pull request #19 from leo-hydraulic/master
Add some leniency to malformed XAR files.
2 parents a72f17a + 7d4ec4d commit e7c5d1c

File tree

3 files changed

+216
-4
lines changed

3 files changed

+216
-4
lines changed

xar/src/main/java/com/sprylab/xar/toc/model/File.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package com.sprylab.xar.toc.model;
22

3+
import java.util.ArrayList;
4+
import java.util.Collections;
35
import java.util.Date;
46
import java.util.List;
57

68
import org.simpleframework.xml.Attribute;
79
import org.simpleframework.xml.Element;
810
import org.simpleframework.xml.ElementList;
11+
import org.simpleframework.xml.ElementListUnion;
912
import org.simpleframework.xml.Root;
1013

1114
@Root
@@ -14,8 +17,10 @@ public class File {
1417
@Attribute
1518
private String id;
1619

17-
@Element
18-
private String name;
20+
@ElementListUnion({
21+
@ElementList(inline = true, entry = "name", type = java.lang.String.class)
22+
})
23+
private List<String> name;
1924

2025
@Element
2126
private Type type;
@@ -71,11 +76,11 @@ public void setId(final String id) {
7176
}
7277

7378
public String getName() {
74-
return name;
79+
return name.get(0);
7580
}
7681

7782
public void setName(final String name) {
78-
this.name = name;
83+
this.name = new ArrayList<>(Collections.singleton(name));
7984
}
8085

8186
public Type getType() {

xar/src/test/java/com/sprylab/xar/toc/ToCTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,19 @@ public class ToCTest {
1919

2020
private static final String TOC_GZIP_XML_FILE_NAME = "toc_gzip.xml";
2121

22+
private static final String TOC_DUPLICATE_XML_FILE_NAME = "toc_duplicate.xml";
23+
2224
private File noneToCFile;
2325

2426
private File gzipToCFile;
2527

28+
private File duplicateToCFile;
29+
2630
@Before
2731
public void setUp() throws IOException, URISyntaxException {
2832
noneToCFile = TestUtil.getClasspathResourceAsFile(TOC_NONE_XML_FILE_NAME);
2933
gzipToCFile = TestUtil.getClasspathResourceAsFile(TOC_GZIP_XML_FILE_NAME);
34+
duplicateToCFile = TestUtil.getClasspathResourceAsFile(TOC_DUPLICATE_XML_FILE_NAME);
3035
}
3136

3237
@Test
@@ -36,5 +41,8 @@ public void testToC() throws Exception {
3641

3742
final ToC gzipToC = TocFactory.fromInputStream(FileUtils.openInputStream(gzipToCFile));
3843
assertNotNull(gzipToC);
44+
45+
final ToC duplicateToC = TocFactory.fromInputStream(FileUtils.openInputStream(duplicateToCFile));
46+
assertNotNull(duplicateToC);
3947
}
4048
}
Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<xar>
3+
<toc>
4+
<checksum style="sha1">
5+
<size>20</size>
6+
<offset>0</offset>
7+
</checksum>
8+
<creation-time>2013-10-21T16:45:16</creation-time>
9+
<file id="1">
10+
<name>dir</name>
11+
<name>dir</name>
12+
<name>dir</name>
13+
<type>directory</type>
14+
<inode>13743520</inode>
15+
<deviceno>16777220</deviceno>
16+
<mode>0755</mode>
17+
<uid>502</uid>
18+
<user>hbakici</user>
19+
<gid>20</gid>
20+
<group>staff</group>
21+
<atime>2013-10-21T16:44:15Z</atime>
22+
<mtime>2013-10-21T16:42:05Z</mtime>
23+
<ctime>2013-10-21T16:42:05Z</ctime>
24+
<FinderCreateTime>
25+
<time>1970-01-01T00:00:00</time>
26+
<nanoseconds>0</nanoseconds>
27+
</FinderCreateTime>
28+
<file id="2">
29+
<name>subdir1</name>
30+
<type>directory</type>
31+
<inode>13747639</inode>
32+
<deviceno>16777220</deviceno>
33+
<mode>0755</mode>
34+
<uid>502</uid>
35+
<user>hbakici</user>
36+
<gid>20</gid>
37+
<group>staff</group>
38+
<atime>2013-10-21T16:44:15Z</atime>
39+
<mtime>2013-10-21T16:40:37Z</mtime>
40+
<ctime>2013-10-21T16:40:37Z</ctime>
41+
<FinderCreateTime>
42+
<time>1970-01-01T00:00:00</time>
43+
<nanoseconds>140192027508736</nanoseconds>
44+
</FinderCreateTime>
45+
<file id="3">
46+
<name>subsubdir_1</name>
47+
<name>subsubdir_1</name>
48+
<type>directory</type>
49+
<inode>13747641</inode>
50+
<deviceno>16777220</deviceno>
51+
<mode>0755</mode>
52+
<uid>502</uid>
53+
<user>hbakici</user>
54+
<gid>20</gid>
55+
<group>staff</group>
56+
<atime>2013-10-21T16:44:15Z</atime>
57+
<mtime>2013-10-18T15:41:08Z</mtime>
58+
<ctime>2013-10-21T12:49:34Z</ctime>
59+
<FinderCreateTime>
60+
<time>1970-01-01T00:00:00</time>
61+
<nanoseconds>140192027508736</nanoseconds>
62+
</FinderCreateTime>
63+
<file id="4">
64+
<name>subsubdir_file_1.txt</name>
65+
<type>file</type>
66+
<inode>13785703</inode>
67+
<deviceno>16777220</deviceno>
68+
<mode>0644</mode>
69+
<uid>502</uid>
70+
<user>hbakici</user>
71+
<gid>20</gid>
72+
<group>staff</group>
73+
<atime>2013-10-21T16:44:15Z</atime>
74+
<mtime>2013-10-18T15:41:08Z</mtime>
75+
<ctime>2013-10-21T12:49:34Z</ctime>
76+
<FinderCreateTime>
77+
<time>1970-01-01T00:00:00</time>
78+
<nanoseconds>140192027508736</nanoseconds>
79+
</FinderCreateTime>
80+
<data>
81+
<extracted-checksum style="sha1">430ce34d020724ed75a196dfc2ad67c77772d169</extracted-checksum>
82+
<archived-checksum style="sha1">0bfd5db240c2998db5078502079fdc0a87d71eae</archived-checksum>
83+
<encoding style="application/x-gzip" />
84+
<size>12</size>
85+
<offset>20</offset>
86+
<length>20</length>
87+
</data>
88+
</file>
89+
</file>
90+
<file id="5">
91+
<name>subsubdir_2</name>
92+
<type>directory</type>
93+
<inode>13777991</inode>
94+
<deviceno>16777220</deviceno>
95+
<mode>0755</mode>
96+
<uid>502</uid>
97+
<user>hbakici</user>
98+
<gid>20</gid>
99+
<group>staff</group>
100+
<atime>2013-10-21T16:44:15Z</atime>
101+
<mtime>2013-10-21T16:39:54Z</mtime>
102+
<ctime>2013-10-21T16:39:54Z</ctime>
103+
<FinderCreateTime>
104+
<time>1970-01-01T00:00:00</time>
105+
<nanoseconds>140192027508736</nanoseconds>
106+
</FinderCreateTime>
107+
<file id="6">
108+
<name>empty_file.txt</name>
109+
<type>file</type>
110+
<inode>13785705</inode>
111+
<deviceno>16777220</deviceno>
112+
<mode>0644</mode>
113+
<uid>502</uid>
114+
<user>hbakici</user>
115+
<gid>20</gid>
116+
<group>staff</group>
117+
<atime>2013-10-21T16:44:15Z</atime>
118+
<mtime>2013-10-21T08:37:00Z</mtime>
119+
<ctime>2013-10-21T12:49:34Z</ctime>
120+
<FinderCreateTime>
121+
<time>1970-01-01T00:00:00</time>
122+
<nanoseconds>140192027508736</nanoseconds>
123+
</FinderCreateTime>
124+
</file>
125+
</file>
126+
<file id="7">
127+
<name>subsubdir_3</name>
128+
<type>directory</type>
129+
<inode>13778007</inode>
130+
<deviceno>16777220</deviceno>
131+
<mode>0755</mode>
132+
<uid>502</uid>
133+
<user>hbakici</user>
134+
<gid>20</gid>
135+
<group>staff</group>
136+
<atime>2013-10-21T16:44:15Z</atime>
137+
<mtime>2013-10-21T16:38:56Z</mtime>
138+
<ctime>2013-10-21T16:38:56Z</ctime>
139+
<FinderCreateTime>
140+
<time>1970-01-01T00:00:00</time>
141+
<nanoseconds>140192027508736</nanoseconds>
142+
</FinderCreateTime>
143+
<file id="8">
144+
<name>1.txt</name>
145+
<type>file</type>
146+
<inode>13785702</inode>
147+
<deviceno>16777220</deviceno>
148+
<mode>0644</mode>
149+
<uid>502</uid>
150+
<user>hbakici</user>
151+
<gid>20</gid>
152+
<group>staff</group>
153+
<atime>2013-10-21T16:44:15Z</atime>
154+
<mtime>2013-10-18T15:41:08Z</mtime>
155+
<ctime>2013-10-21T12:49:34Z</ctime>
156+
<FinderCreateTime>
157+
<time>1970-01-01T00:00:00</time>
158+
<nanoseconds>140192027508736</nanoseconds>
159+
</FinderCreateTime>
160+
<data>
161+
<extracted-checksum style="sha1">274a5f67d6c06f5ef3bc3c0bbee98105ea194c5e</extracted-checksum>
162+
<archived-checksum style="sha1">dc6fb464f4857b0e429e13735ecd9f4fae0c8fcb</archived-checksum>
163+
<encoding style="application/x-gzip" />
164+
<size>14</size>
165+
<offset>40</offset>
166+
<length>22</length>
167+
</data>
168+
</file>
169+
</file>
170+
</file>
171+
</file>
172+
<file id="9">
173+
<name>file.txt</name>
174+
<type>file</type>
175+
<inode>13743523</inode>
176+
<deviceno>16777220</deviceno>
177+
<mode>0644</mode>
178+
<uid>502</uid>
179+
<user>hbakici</user>
180+
<gid>20</gid>
181+
<group>staff</group>
182+
<atime>2013-10-21T16:44:15Z</atime>
183+
<mtime>2013-10-18T14:41:00Z</mtime>
184+
<ctime>2013-10-18T14:41:00Z</ctime>
185+
<FinderCreateTime>
186+
<time>1970-01-01T00:00:00</time>
187+
<nanoseconds>0</nanoseconds>
188+
</FinderCreateTime>
189+
<data>
190+
<extracted-checksum style="sha1">046c168df2244d3a13985f042a50e479fe56455e</extracted-checksum>
191+
<archived-checksum style="sha1">5ddc4863d4626b26363b082999fe95a47fde761c</archived-checksum>
192+
<encoding style="application/x-gzip" />
193+
<size>5</size>
194+
<offset>62</offset>
195+
<length>13</length>
196+
</data>
197+
</file>
198+
</toc>
199+
</xar>

0 commit comments

Comments
 (0)