File tree Expand file tree Collapse file tree 2 files changed +30
-0
lines changed
Expand file tree Collapse file tree 2 files changed +30
-0
lines changed Original file line number Diff line number Diff 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 ) ;
Original file line number Diff line number Diff 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}
You can’t perform that action at this time.
0 commit comments