Skip to content

Commit dc3e2dc

Browse files
committed
fn ZDICT_fillNoise: make safe
1 parent 8ea4074 commit dc3e2dc

File tree

1 file changed

+15
-24
lines changed

1 file changed

+15
-24
lines changed

lib/dictBuilder/zdict.rs

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -715,18 +715,19 @@ unsafe fn ZDICT_trainBuffer_legacy(
715715
free(filePos as *mut core::ffi::c_void);
716716
result
717717
}
718-
unsafe fn ZDICT_fillNoise(buffer: *mut core::ffi::c_void, length: size_t) {
719-
let prime1 = 2654435761 as core::ffi::c_uint;
720-
let prime2 = 2246822519 as core::ffi::c_uint;
718+
719+
fn ZDICT_fillNoise(buffer: &mut [u8]) {
720+
const prime1: u32 = 2654435761;
721+
const prime2: u32 = 2246822519;
722+
721723
let mut acc = prime1;
722-
let mut p = 0;
723-
p = 0;
724-
while p < length {
724+
725+
for e in buffer.iter_mut() {
725726
acc = acc.wrapping_mul(prime2);
726-
*(buffer as *mut core::ffi::c_uchar).add(p) = (acc >> 21) as core::ffi::c_uchar;
727-
p = p.wrapping_add(1);
727+
*e = (acc >> 21) as u8;
728728
}
729729
}
730+
730731
const MAXREPOFFSET: core::ffi::c_int = 1024;
731732
unsafe fn ZDICT_countEStats(
732733
esr: EStats_ress_t,
@@ -1569,31 +1570,21 @@ pub unsafe extern "C" fn ZDICT_trainFromBuffer_legacy(
15691570
nbSamples: core::ffi::c_uint,
15701571
params: ZDICT_legacy_params_t,
15711572
) -> size_t {
1572-
let mut result: size_t = 0;
1573-
let mut newBuff = core::ptr::null_mut::<core::ffi::c_void>();
15741573
let sBuffSize = ZDICT_totalSampleSize(samplesSizes, nbSamples);
15751574
if sBuffSize < ZDICT_MIN_SAMPLES_SIZE as size_t {
15761575
return 0;
15771576
}
1578-
newBuff = malloc(sBuffSize.wrapping_add(NOISELENGTH as size_t));
1579-
if newBuff.is_null() {
1580-
return Error::memory_allocation.to_error_code();
1581-
}
1582-
memcpy(newBuff, samplesBuffer, sBuffSize);
1583-
ZDICT_fillNoise(
1584-
(newBuff as *mut core::ffi::c_char).add(sBuffSize) as *mut core::ffi::c_void,
1585-
NOISELENGTH as size_t,
1586-
);
1587-
result = ZDICT_trainFromBuffer_unsafe_legacy(
1577+
let mut new_buf = vec![0u8; sBuffSize.wrapping_add(NOISELENGTH as size_t)];
1578+
core::ptr::copy_nonoverlapping(samplesBuffer.cast::<u8>(), new_buf.as_mut_ptr(), sBuffSize);
1579+
ZDICT_fillNoise(&mut new_buf[sBuffSize..]);
1580+
ZDICT_trainFromBuffer_unsafe_legacy(
15881581
dictBuffer,
15891582
dictBufferCapacity,
1590-
newBuff,
1583+
new_buf.as_ptr().cast::<core::ffi::c_void>(),
15911584
samplesSizes,
15921585
nbSamples,
15931586
params,
1594-
);
1595-
free(newBuff);
1596-
result
1587+
)
15971588
}
15981589

15991590
#[cfg_attr(feature = "export-symbols", export_name = crate::prefix!(ZDICT_trainFromBuffer))]

0 commit comments

Comments
 (0)