-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Use a u64 for the rmeta root position #118344
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -120,13 +120,18 @@ pub fn read_version(dylib_path: &AbsPath) -> io::Result<String> { | |
let version = u32::from_be_bytes([dot_rustc[4], dot_rustc[5], dot_rustc[6], dot_rustc[7]]); | ||
WaffleLapkin marked this conversation as resolved.
Show resolved
Hide resolved
|
||
// Last supported version is: | ||
// https://github.com/rust-lang/rust/commit/0696e79f2740ad89309269b460579e548a5cd632 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this should point to your commit updating the format (yes it looks like we forgot to update it 2 times already). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's so outdated that when I saw this I wasn't sure if it's supposed to point at the oldest or the newest version that's supported. I can point this at the first commit in this PR. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think it's supposed to point at the newest, because
|
||
let snappy_portion = match version { | ||
5 | 6 => &dot_rustc[8..], | ||
let (snappy_portion, bytes_before_version) = match version { | ||
5 | 6 => (&dot_rustc[8..], 13), | ||
7 | 8 => { | ||
let len_bytes = &dot_rustc[8..12]; | ||
let data_len = u32::from_be_bytes(len_bytes.try_into().unwrap()) as usize; | ||
&dot_rustc[12..data_len + 12] | ||
(&dot_rustc[12..data_len + 12], 13) | ||
} | ||
9 => { | ||
let len_bytes = &dot_rustc[8..16]; | ||
let data_len = u64::from_le_bytes(len_bytes.try_into().unwrap()) as usize; | ||
(&dot_rustc[16..data_len + 12], 17) | ||
} | ||
_ => { | ||
return Err(io::Error::new( | ||
io::ErrorKind::InvalidData, | ||
|
@@ -142,15 +147,15 @@ pub fn read_version(dylib_path: &AbsPath) -> io::Result<String> { | |
Box::new(SnapDecoder::new(snappy_portion)) | ||
}; | ||
|
||
// the bytes before version string bytes, so this basically is: | ||
// We're going to skip over the bytes before the version string, so basically: | ||
// 8 bytes for [b'r',b'u',b's',b't',0,0,0,5] | ||
// 4 bytes for [crate root bytes] | ||
// 4 or 8 bytes for [crate root bytes] | ||
// 1 byte for length of version string | ||
// so 13 bytes in total, and we should check the 13th byte | ||
// so 13 or 17 bytes in total, and we should check the last of those bytes | ||
// to know the length | ||
let mut bytes_before_version = [0u8; 13]; | ||
let mut bytes_before_version = vec![0u8; bytes_before_version]; | ||
uncompressed.read_exact(&mut bytes_before_version)?; | ||
saethlin marked this conversation as resolved.
Show resolved
Hide resolved
|
||
let length = bytes_before_version[12]; | ||
let length = *bytes_before_version.last().unwrap(); | ||
|
||
let mut version_string_utf8 = vec![0u8; length as usize]; | ||
uncompressed.read_exact(&mut version_string_utf8)?; | ||
|
Uh oh!
There was an error while loading. Please reload this page.