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_codegen_ssa | |
| 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_codegen_ssa')
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/back/metadata.rs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/compiler/rustc_codegen_ssa/src/back/metadata.rs b/compiler/rustc_codegen_ssa/src/back/metadata.rs index 190cd69a0e9..75daf33db30 100644 --- a/compiler/rustc_codegen_ssa/src/back/metadata.rs +++ b/compiler/rustc_codegen_ssa/src/back/metadata.rs @@ -305,8 +305,13 @@ pub fn create_compressed_metadata_file( symbol_name: &str, ) -> Vec<u8> { let mut compressed = rustc_metadata::METADATA_HEADER.to_vec(); - compressed.write_all(&(metadata.raw_data().len() as u32).to_be_bytes()).unwrap(); + // Our length will be backfilled once we're done writing + compressed.write_all(&[0; 4]).unwrap(); FrameEncoder::new(&mut compressed).write_all(metadata.raw_data()).unwrap(); + let meta_len = rustc_metadata::METADATA_HEADER.len(); + let data_len = (compressed.len() - meta_len - 4) as u32; + compressed[meta_len..meta_len + 4].copy_from_slice(&data_len.to_be_bytes()); + let Some(mut file) = create_object_file(sess) else { return compressed.to_vec(); }; |
