Removing unecessary unsafe blocks
Dependencies
- [2]
K6L5F26WFixing sequential test. - [3]
HEFGMMUMStart oxidizing 1/N - [4]
IH334Q5AReboot - [5]
IB4L4N5MFixing the lifetimes for `Seekable` - [6]
SZHL3TSDFixing tests - [7]
HA3ODU4GFixing compilation
Change contents
- replacement in src/lib.rs at line 346
let result = self.framelog.write_seek_table(&mut output_)?;let result = self.framelog.write_seek_table(output, &mut output_.pos)?; - replacement in src/lib.rs at line 591
// FIXME: replace this pointer arithmetic with something saferunsafe { (buffer_ptr.add(pos)).copy_to(buffer_ptr, offset) };self.in_buff.copy_within(offset..offset+to_read,pos); - replacement in src/lib.rs at line 594
// FIXME: if pointer arithmetic were to be replaced, this needs to changehandle.read(unsafe { slice::from_raw_parts_mut(buffer_ptr.add(offset), to_read) })?;handle.read(&mut self.in_buff[offset..offset+to_read])?; - replacement in src/lib.rs at line 688
let mut out_tmp = if self.decompressed_offset < offset {ZSTD_outBuffer {// here slice_tmp is a [u8] helper so we avoid using unsafe pointer arithmetic later onlet (mut out_tmp, slice_tmp) = if self.decompressed_offset < offset {(ZSTD_outBuffer { - replacement in src/lib.rs at line 697
}}, (&self.out_buff).as_ref()) - replacement in src/lib.rs at line 699
ZSTD_outBuffer {(ZSTD_outBuffer { - replacement in src/lib.rs at line 703
}}, &*out) - replacement in src/lib.rs at line 718
// FIXME: replace this pointer arithmetic with something saferlet tmp: &[u8] = unsafe {slice::from_raw_parts_mut((out_tmp.dst as *mut u8).add(prev_out_pos),out_tmp.pos - prev_out_pos,)};self.xxh_state.write(tmp)self.xxh_state.write(&slice_tmp[prev_out_pos..prev_out_pos+(out_tmp.pos - prev_out_pos)]); - replacement in src/lib.rs at line 941
pub fn stwrite32(&mut self, output: &mut ZSTD_outBuffer, value: u32, offset: u32) -> usize {pub fn stwrite32(&mut self, output: &mut [u8], value: u32, offset: u32, pos: &mut usize) -> usize { - replacement in src/lib.rs at line 944
output.size - output.pos,output.len() - *pos, - replacement in src/lib.rs at line 948
// FIXME: replace this pointer arithmetic with something saferunsafe {let base = output.dst.add(output.pos) as *mut u8;ptr::copy(value.to_ne_bytes().as_ptr(),base,len_write);}output[*pos..*pos+len_write].copy_from_slice(&value.to_ne_bytes()); - replacement in src/lib.rs at line 950
output.pos += len_write;*pos += len_write; - replacement in src/lib.rs at line 970
while let Ok(ret) = self.write_seek_table(&mut output_) {while let Ok(ret) = self.write_seek_table(&mut output, &mut output_.pos) { - replacement in src/lib.rs at line 983
pub fn write_seek_table(&mut self, output: &mut ZSTD_outBuffer) -> Result<usize, Error> {pub fn write_seek_table(&mut self, output: &mut [u8], pos: &mut usize) -> Result<usize, Error> { - replacement in src/lib.rs at line 987
let mut ret: usize = self.stwrite32(output, MAGIC_SKIPPABLE_START | 0xE, 0);let mut ret: usize = self.stwrite32(output, MAGIC_SKIPPABLE_START | 0xE, 0, pos); - replacement in src/lib.rs at line 994
ret = self.stwrite32(output, (table_len - SKIPPABLE_HEADER_SIZE) as u32, 4);ret = self.stwrite32(output, (table_len - SKIPPABLE_HEADER_SIZE) as u32, 4, pos); - replacement in src/lib.rs at line 1005
ret = self.stwrite32(output, self.entries[i].c_size, start);ret = self.stwrite32(output, self.entries[i].c_size, start, pos); - replacement in src/lib.rs at line 1010
ret = self.stwrite32(output, self.entries[i].d_size, start + 4);ret = self.stwrite32(output, self.entries[i].d_size, start + 4, pos); - replacement in src/lib.rs at line 1016
ret = self.stwrite32(output, self.entries[i].checksum as u32, start + 8);ret = self.stwrite32(output, self.entries[i].checksum as u32, start + 8, pos); - edit in src/lib.rs at line 1032
pos - replacement in src/lib.rs at line 1038
if output.size - output.pos < 1 {if output.len() - *pos < 1 { - replacement in src/lib.rs at line 1044[3.25180]→[3.25180:25279](∅→∅),[3.25279]→[2.8145:8182](∅→∅),[2.8182]→[3.25444:25473](∅→∅),[3.25444]→[3.25444:25473](∅→∅)
let array = unsafe { slice::from_raw_parts_mut(output.dst as *mut u8, output.size) };array[output.pos] = sfd;output.pos += 1;output[*pos] = sfd;*pos += 1; - replacement in src/lib.rs at line 1049
ret = self.stwrite32(output, SEEKABLE_MAGIC_NUMBER, (table_len - 4) as u32);ret = self.stwrite32(output, SEEKABLE_MAGIC_NUMBER, (table_len - 4) as u32, pos); - replacement in src/lib.rs at line 1121
// #[test]// fn test() {// let mut cstream = SeekableCStream::new(10, 256).unwrap();// let input = b"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut diam ante, sollicitudin a dolor et, volutpat elementum nulla. Etiam nec efficitur nibh, quis rutrum risus. Maecenas quis lorem malesuada, aliquet mi vel, viverra nunc. Donec et nulla sed velit sagittis varius. Suspendisse vestibulum, neque lobortis ornare vestibulum, orci turpis vulputate nisi, ut sodales neque purus eget magna. Nunc condimentum, diam eu consequat venenatis, est nisl semper lorem, et lobortis velit justo sed nulla. Nunc sit amet tempor nunc, vel posuere ipsum. Cras erat tortor, pulvinar ac pretium eu, auctor ac nibh. Duis iaculis porta magna, eu lobortis elit. Duis vitae massa eros. Nulla non magna accumsan, egestas quam sit amet, laoreet lectus.";// let mut input_pos = 0;// let mut output = vec![0; input.len()];// let mut output_pos = 0;// while input_pos < input.len() {// let (a, b) = cstream// .compress(&mut output[output_pos..], &input[input_pos..])// .unwrap();// output_pos += a;// input_pos += b;// }// while let Ok(n) = cstream.end_stream(&mut output[output_pos..]) {// if n == 0 {// break;// }// output_pos += n;// }// output.truncate(output_pos);// {// use std::io::Write;// let mut file = std::fs::File::create("test").unwrap();// file.write_all(&output).unwrap();// }// println!("input len = {:?}, pos = {:?}", input.len(), output_pos);#[test]fn test() {let mut cstream = SeekableCStream::new(10, 256).unwrap();let input = b"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut diam ante, sollicitudin a dolor et, volutpat elementum nulla. Etiam nec efficitur nibh, quis rutrum risus. Maecenas quis lorem malesuada, aliquet mi vel, viverra nunc. Donec et nulla sed velit sagittis varius. Suspendisse vestibulum, neque lobortis ornare vestibulum, orci turpis vulputate nisi, ut sodales neque purus eget magna. Nunc condimentum, diam eu consequat venenatis, est nisl semper lorem, et lobortis velit justo sed nulla. Nunc sit amet tempor nunc, vel posuere ipsum. Cras erat tortor, pulvinar ac pretium eu, auctor ac nibh. Duis iaculis porta magna, eu lobortis elit. Duis vitae massa eros. Nulla non magna accumsan, egestas quam sit amet, laoreet lectus.";let mut input_pos = 0;let mut output = vec![0; input.len()];let mut output_pos = 0;while input_pos < input.len() {let (a, b) = cstream.compress(&mut output[output_pos..], &input[input_pos..]).unwrap();output_pos += a;input_pos += b;}while let Ok(n) = cstream.end_stream(&mut output[output_pos..]) {if n == 0 {break;}output_pos += n;}output.truncate(output_pos);{use std::io::Write;let mut file = std::fs::File::create("test").unwrap();file.write_all(&output).unwrap();}println!("input len = {:?}, pos = {:?}", input.len(), output_pos); - replacement in src/lib.rs at line 1149
// let mut decomp = Vec::new();// let mut s = { Seekable::init_buf(&mut output).unwrap() };// for frame in 0..s.get_num_frames() {// let size = s.get_frame_decompressed_size(frame).unwrap();// println!("{:?} {:?}", size, s.get_frame_decompressed_offset(frame).unwrap());// let n = decomp.len();// decomp.extend(std::iter::repeat(0).take(size));// s.decompress_frame(&mut decomp[n..], frame).unwrap();// }// println!("{:?}", std::str::from_utf8(&decomp).unwrap());// assert_eq!(&input[..], &decomp[..])// }[3.266]let mut decomp = Vec::new();let mut s = { Seekable::init_buf(&mut output).unwrap() };for frame in 0..s.get_num_frames() {let size = s.get_frame_decompressed_size(frame).unwrap();println!("{:?} {:?}", size, s.get_frame_decompressed_offset(frame).unwrap());let n = decomp.len();decomp.extend(std::iter::repeat(0).take(size));s.decompress_frame(&mut decomp[n..], frame).unwrap();}println!("{:?}", std::str::from_utf8(&decomp).unwrap());assert_eq!(&input[..], &decomp[..])}