From 182e1f7d7b5b41b5702a3dc7a1c8bf86dc7ddb01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Audiger?= Date: Mon, 30 Mar 2026 20:25:07 +0200 Subject: [PATCH] fix(autopack): ensure shared library with interpret section is detected as `AutopackKind::SharedLibrary` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémy Audiger --- crates/brioche-autopack/src/lib.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/crates/brioche-autopack/src/lib.rs b/crates/brioche-autopack/src/lib.rs index 38e6d80..d1c0fcd 100644 --- a/crates/brioche-autopack/src/lib.rs +++ b/crates/brioche-autopack/src/lib.rs @@ -439,13 +439,16 @@ fn autopack_kind(path: &Path) -> eyre::Result> { return Ok(None); }; - // Only ET_EXEC and ET_DYN can potentially be packed + // Only ET_EXEC and ET_DYN can potentially be packed. + // Check if it's a library first. A shared library can + // have an interpreter section and it should be packed + // as SharedLibrary, not DynamicBinary. match elf_object.header.e_type { goblin::elf::header::ET_EXEC | goblin::elf::header::ET_DYN => { - if elf_object.interpreter.is_some() { - Ok(Some(AutopackKind::DynamicBinary)) - } else if elf_object.is_lib { + if elf_object.is_lib { Ok(Some(AutopackKind::SharedLibrary)) + } else if elf_object.interpreter.is_some() { + Ok(Some(AutopackKind::DynamicBinary)) } else { Ok(None) }