|
|
|
@ -258,21 +258,23 @@ impl LdSoCache {
|
|
|
|
|
)
|
|
|
|
|
)?;
|
|
|
|
|
let mut is_old: bool = false;
|
|
|
|
|
if header != LD_SO_CACHE_HEADER {
|
|
|
|
|
if header != LD_SO_CACHE_HEADER_OLD {
|
|
|
|
|
return Err(io::Error::new(
|
|
|
|
|
io::ErrorKind::InvalidData,
|
|
|
|
|
"invalid ld.so.cache header",
|
|
|
|
|
));
|
|
|
|
|
} else {
|
|
|
|
|
match header {
|
|
|
|
|
LD_SO_CACHE_HEADER => {
|
|
|
|
|
// we have to reset the position since we found the new header
|
|
|
|
|
cursor.set_position(LD_SO_CACHE_HEADER.len() as u64);
|
|
|
|
|
}
|
|
|
|
|
LD_SO_CACHE_HEADER_OLD => {
|
|
|
|
|
is_old = true;
|
|
|
|
|
// add a padding corresponding to LD_SO_CACHE_HEADER_OLD
|
|
|
|
|
// size 11 + 1 to align on 12 bytes or 3*4 bounds
|
|
|
|
|
cursor.consume(1)
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// we have to reset the position since we found the new header
|
|
|
|
|
cursor.set_position(LD_SO_CACHE_HEADER.len() as u64);
|
|
|
|
|
_ => {
|
|
|
|
|
return Err(io::Error::new(
|
|
|
|
|
io::ErrorKind::InvalidData,
|
|
|
|
|
"invalid ld.so.cache header",
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let num_entries: u32 = read_u32(&mut cursor)?;
|
|
|
|
|