mirror of https://github.com/astral-sh/uv
Read from `/bin/sh` if `/bin/ls` cannot be found when determing libc path (#1433)
I'm not sure if we should just switch to _always_ reading from sh instead? I don't love that all these errors are strings and I if `/bin/ls` exists but can't be parsed we still won't try `/bin/sh`. We may want to address these things in the future. Closes https://github.com/astral-sh/uv/issues/1395
This commit is contained in:
parent
c474370064
commit
d99c4cacdf
|
|
@ -127,17 +127,27 @@ fn get_musl_version(ld_path: impl AsRef<Path>) -> std::io::Result<Option<(u16, u
|
||||||
|
|
||||||
/// Find musl libc path from executable's ELF header.
|
/// Find musl libc path from executable's ELF header.
|
||||||
fn find_libc() -> Result<PathBuf, PlatformError> {
|
fn find_libc() -> Result<PathBuf, PlatformError> {
|
||||||
let buffer = fs::read("/bin/ls")?;
|
// We'll try to parse the first file we read successfully
|
||||||
let error_str = "Couldn't parse /bin/ls for detecting the ld version";
|
for path in ["/bin/ls", "/bin/sh"] {
|
||||||
let elf = Elf::parse(&buffer)
|
let Ok(buffer) = fs::read(path) else {
|
||||||
.map_err(|err| PlatformError::OsVersionDetectionError(format!("{error_str}: {err}")))?;
|
continue;
|
||||||
if let Some(elf_interpreter) = elf.interpreter {
|
};
|
||||||
Ok(PathBuf::from(elf_interpreter))
|
let elf = Elf::parse(&buffer).map_err(|err| {
|
||||||
} else {
|
PlatformError::OsVersionDetectionError(format!(
|
||||||
Err(PlatformError::OsVersionDetectionError(
|
"Couldn't parse {path} to detect the ld version: {err}"
|
||||||
error_str.to_string(),
|
|
||||||
))
|
))
|
||||||
|
})?;
|
||||||
|
if let Some(elf_interpreter) = elf.interpreter {
|
||||||
|
return Ok(PathBuf::from(elf_interpreter));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Err(PlatformError::OsVersionDetectionError(format!(
|
||||||
|
"Couldn't parse {path} to detect the ld version"
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
Err(PlatformError::OsVersionDetectionError(
|
||||||
|
"Failed to find binary at `/bin/ls` or `/bin/sh` to read ld version from".to_string(),
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue