From 5637657c2f076d7fc74adc317d9e093b2ac3fcfc Mon Sep 17 00:00:00 2001 From: Paul Masurel Date: Wed, 25 Apr 2018 19:15:32 +0900 Subject: [PATCH] Removed ptr dereference for explicit ptr::read_unaligned --- src/termdict/term_info_store.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/termdict/term_info_store.rs b/src/termdict/term_info_store.rs index 86d74fffe..e5f8b83b4 100644 --- a/src/termdict/term_info_store.rs +++ b/src/termdict/term_info_store.rs @@ -6,8 +6,8 @@ use common::{BinarySerializable, FixedSize}; use directory::ReadOnlySource; use postings::TermInfo; use std::cmp; -use std::io; -use std::io::{Read, Write}; +use std::ptr; +use std::io::{self, Read, Write}; use termdict::TermOrdinal; const BLOCK_LEN: usize = 256; @@ -92,7 +92,10 @@ fn extract_bits(data: &[u8], addr_bits: usize, num_bits: u8) -> u64 { assert!(num_bits <= 56); let addr_byte = addr_bits / 8; let bit_shift = (addr_bits % 8) as u64; - let val_unshifted_unmasked: u64 = unsafe { *(data[addr_byte..].as_ptr() as *const u64) }; + let val_unshifted_unmasked: u64 = unsafe { + let addr = data.as_ptr().offset(addr_byte as isize) as *const u64; + ptr::read_unaligned(addr) + }; let val_shifted_unmasked = val_unshifted_unmasked >> bit_shift; let mask = (1u64 << u64::from(num_bits)) - 1; val_shifted_unmasked & mask