diff options
| author | Rune Tynan <runetynan@gmail.com> | 2023-02-13 13:39:28 -0500 |
|---|---|---|
| committer | Rune Tynan <runetynan@gmail.com> | 2023-02-20 13:38:27 -0500 |
| commit | 7df53d5e18cc5b39d9452e4aa3c653d0efa9f65f (patch) | |
| tree | 923060a4663cf44d3ca381ba9d727ef145739fdf /compiler/rustc_metadata | |
| parent | dce3947110a73efebb756242d5c775a3ddad32a9 (diff) | |
| download | rust-7df53d5e18cc5b39d9452e4aa3c653d0efa9f65f.tar.gz rust-7df53d5e18cc5b39d9452e4aa3c653d0efa9f65f.zip | |
Fix metadata encoding and decoding to use the right length
Diffstat (limited to 'compiler/rustc_metadata')
| -rw-r--r-- | compiler/rustc_metadata/src/locator.rs | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/compiler/rustc_metadata/src/locator.rs b/compiler/rustc_metadata/src/locator.rs index 285d6e22d47..ea1ba8a9eda 100644 --- a/compiler/rustc_metadata/src/locator.rs +++ b/compiler/rustc_metadata/src/locator.rs @@ -799,14 +799,14 @@ fn get_metadata_section<'p>( } // Length of the compressed stream - this allows linkers to pad the section if they want - let usize_len = core::mem::size_of::<u32>(); - let Ok(len_bytes) = <[u8; 4]>::try_from(&buf[header_len..cmp::min(header_len + usize_len, buf.len())]) else { + let u32_len = core::mem::size_of::<u32>(); + let Ok(len_bytes) = <[u8; 4]>::try_from(&buf[header_len..cmp::min(header_len + u32_len, buf.len())]) else { return Err(MetadataError::LoadFailure("invalid metadata length found".to_string())); }; let compressed_len = u32::from_be_bytes(len_bytes) as usize; // Header is okay -> inflate the actual metadata - let compressed_bytes = &buf[header_len..compressed_len + header_len]; + let compressed_bytes = &buf[(header_len + u32_len)..(compressed_len + header_len + u32_len)]; debug!("inflating {} bytes of compressed metadata", compressed_bytes.len()); // Assume the decompressed data will be at least the size of the compressed data, so we // don't have to grow the buffer as much. |
