From 8d05cae3027e3731602292c9e2d8c3cd53ebeec9 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Fri, 10 Nov 2023 10:48:16 +0100 Subject: [PATCH] fix: adjust tree parser to deal with even more unusual trees (#1096). --- gix-object/src/tree/ref_iter.rs | 11 +++++++---- gix-object/tests/fixtures/tree/special-5.tree | Bin 0 -> 651 bytes gix-object/tests/tree/mod.rs | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 gix-object/tests/fixtures/tree/special-5.tree diff --git a/gix-object/src/tree/ref_iter.rs b/gix-object/src/tree/ref_iter.rs index c18a0d5f532..510ae34b997 100644 --- a/gix-object/src/tree/ref_iter.rs +++ b/gix-object/src/tree/ref_iter.rs @@ -101,12 +101,15 @@ impl TryFrom for tree::EntryMode { fn try_from(mode: u32) -> Result { Ok(match mode { 0o40000 => tree::EntryMode::Tree, - 0o100644 => tree::EntryMode::Blob, - 0o100755 => tree::EntryMode::BlobExecutable, 0o120000 => tree::EntryMode::Link, 0o160000 => tree::EntryMode::Commit, - 0o100664 => tree::EntryMode::Blob, // rare and found in the linux kernel - 0o100640 => tree::EntryMode::Blob, // rare and found in the Rust repo + blob_mode if blob_mode & 0o100000 == 0o100000 => { + if blob_mode & 0o000100 == 0o000100 { + tree::EntryMode::BlobExecutable + } else { + tree::EntryMode::Blob + } + } _ => return Err(mode), }) } diff --git a/gix-object/tests/fixtures/tree/special-5.tree b/gix-object/tests/fixtures/tree/special-5.tree new file mode 100644 index 0000000000000000000000000000000000000000..67843b90078c9a54fc349b92662c09cf19de64c1 GIT binary patch literal 651 zcmXpsFfcPQQPA^nj1O}S3ikB(W60)d-mW$GNpVJ0^q&o!to$o(orpJtDof8S$xP47 zFG^+DX17S>GpuU*mjaD42ilmNpO==IURnfJs8^Yoo5QeRv)QiFpJ%R1-bz~bzV{cSo@iAl z)Z*mQVxXa!RjCk_^F%vT-Hy30>w5GoXf^BJ1a8@P-4M&ui}Fhg7?xaEFTZ{ckKMIN z3!i8=fAGH6)Wrdj&&(?*Es0Oc&(BFs%wy2#_~|<Cost1C{; zNlh+c$g7elJ;<ObLyYJY&n8OT}Pt7aNFJkz*Oe#0&3Ky@5e8-&6o9k38maJBR+EWZx z5#$E3X_9wRk%7OVbL*yO6Y~vb&Wt;sx&)}u+|*Q|xID8YIRm0B?URdi_$9A^nGP3T zv^D?Xm{i!_4mGbNBQ-a*7^2MOMELEA?6vW1TRr7Ad=N3L$ufNkRaTywl#`j44N-UL zsnsQmCo&J7|D1eo;x~^b`<2_-Anq?OFK1XNK2O8?`JH=JIUl