Skip to content

Commit e5f08ef

Browse files
committed
Reject ZST
1 parent 6e26410 commit e5f08ef

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

src/mpmc.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,10 @@ impl SharedQueueHeader {
539539
}
540540

541541
const fn calculate_buffer_size_in_items<T: Sized>(file_size: usize) -> Result<usize, Error> {
542+
if core::mem::size_of::<T>() == 0 {
543+
return Err(Error::InvalidBufferSize);
544+
}
545+
542546
let buffer_offset = Self::buffer_offset::<T>();
543547
if file_size < buffer_offset {
544548
return Err(Error::InvalidBufferSize);
@@ -938,6 +942,17 @@ mod tests {
938942
}
939943
}
940944

945+
#[test]
946+
fn test_zero_sized_types_are_rejected() {
947+
let file = create_temp_shmem_file().unwrap();
948+
let err = match unsafe { Producer::<()>::create(&file, minimum_file_size::<()>(8)) } {
949+
Ok(_) => panic!("zst queue creation should fail"),
950+
Err(err) => err,
951+
};
952+
953+
assert!(matches!(err, Error::InvalidBufferSize));
954+
}
955+
941956
#[test]
942957
fn test_try_write_slice() {
943958
let (_file, producer, consumer) = create_test_queue::<Item>(BUFFER_SIZE);

src/spsc.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,10 @@ impl SharedQueueHeader {
409409
}
410410

411411
const fn calculate_buffer_size_in_items<T: Sized>(file_size: usize) -> Result<usize, Error> {
412+
if core::mem::size_of::<T>() == 0 {
413+
return Err(Error::InvalidBufferSize);
414+
}
415+
412416
let buffer_offset = Self::buffer_offset::<T>();
413417
if file_size < buffer_offset {
414418
return Err(Error::InvalidBufferSize);
@@ -623,4 +627,15 @@ mod tests {
623627

624628
assert_eq!(producer.capacity(), 4);
625629
}
630+
631+
#[test]
632+
fn test_zero_sized_types_are_rejected() {
633+
let file = create_temp_shmem_file().unwrap();
634+
let err = match unsafe { Producer::<()>::create(&file, minimum_file_size::<()>(8)) } {
635+
Ok(_) => panic!("zst queue creation should fail"),
636+
Err(err) => err,
637+
};
638+
639+
assert!(matches!(err, Error::InvalidBufferSize));
640+
}
626641
}

0 commit comments

Comments
 (0)