Skip to content

Commit 9a1c117

Browse files
Merge pull request #130 from CosmicHorrorDev/bad-central
fix(rc-zip): temporarily ignore info-zip old unix extra field
2 parents f7e50d7 + 0db5997 commit 9a1c117

File tree

3 files changed

+26
-7
lines changed

3 files changed

+26
-7
lines changed

rc-zip/src/corpus/mod.rs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,14 @@ pub fn test_cases() -> Vec<Case> {
207207
files: Files::NumFiles(11372),
208208
..Default::default()
209209
},
210+
Case {
211+
name: "info-zip-unix-extra.zip",
212+
files: Files::ExhaustiveList(vec![CaseFile {
213+
name: "bun-darwin-x64/",
214+
..Default::default()
215+
}]),
216+
..Default::default()
217+
},
210218
#[cfg(feature = "lzma")]
211219
Case {
212220
name: "found-me-lzma.zip",
@@ -261,11 +269,18 @@ pub fn test_cases() -> Vec<Case> {
261269
}
262270

263271
pub fn streaming_test_cases() -> Vec<Case> {
264-
vec![Case {
265-
name: "meta.zip",
266-
files: Files::NumFiles(0),
267-
..Default::default()
268-
}]
272+
vec![
273+
Case {
274+
name: "meta.zip",
275+
files: Files::NumFiles(0),
276+
..Default::default()
277+
},
278+
Case {
279+
name: "info-zip-unix-extra.zip",
280+
files: Files::NumFiles(0),
281+
..Default::default()
282+
},
283+
]
269284
}
270285

271286
pub fn check_case(case: &Case, archive: Result<&Archive, &Error>) {

rc-zip/src/parse/extra_field.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ impl<'a> ExtraField<'a> {
9999
ExtraNtfsField::TAG => {
100100
opt(ExtraNtfsField::parser.map(EF::Ntfs)).parse_next(payload)?
101101
}
102-
ExtraUnixField::TAG | ExtraUnixField::TAG_INFOZIP => {
102+
ExtraUnixField::TAG => {
103103
opt(ExtraUnixField::parser.map(EF::Unix)).parse_next(payload)?
104104
}
105105
ExtraNewUnixField::TAG => {
@@ -201,7 +201,11 @@ pub struct ExtraUnixField<'a> {
201201

202202
impl<'a> ExtraUnixField<'a> {
203203
const TAG: u16 = 0x000d;
204-
const TAG_INFOZIP: u16 = 0x5855;
204+
// FIXME(cosmic): add support after `ExtraUnixField`'s structure accounts for info-zip storing
205+
// less information than with `::TAG`. the smaller variant stores just atime and mtime while
206+
// the larger additionally store a `uid` and `gid` as well. the variant is determined based off
207+
// of `t_size`, with no additional variable data
208+
const _TAG_INFOZIP: u16 = 0x5855;
205209

206210
fn parser(i: &mut Partial<&'a [u8]>) -> PResult<Self> {
207211
let t_size = le_u16.parse_next(i)?;

testdata/info-zip-unix-extra.zip

156 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)