@@ -144,13 +144,19 @@ pub fn compare_prefixed_slice(prefix: &[u8], suffix: &[u8], needle: &[u8]) -> st
144144
145145 {
146146 #[ expect( unsafe_code, reason = "We checked for max_pfx_len" ) ]
147- let prefix = unsafe { prefix. get_unchecked ( 0 ..max_pfx_len) } ;
147+ let prefix_truncated = unsafe { prefix. get_unchecked ( 0 ..max_pfx_len) } ;
148148
149149 #[ expect( unsafe_code, reason = "We checked for max_pfx_len" ) ]
150- let needle = unsafe { needle. get_unchecked ( 0 ..max_pfx_len) } ;
150+ let needle_truncated = unsafe { needle. get_unchecked ( 0 ..max_pfx_len) } ;
151151
152- match prefix. cmp ( needle) {
153- Equal => { }
152+ match prefix_truncated. cmp ( needle_truncated) {
153+ Equal => {
154+ let rest_len = prefix. len ( ) . saturating_sub ( needle. len ( ) ) ;
155+
156+ if rest_len > 0 {
157+ return Greater ;
158+ }
159+ }
154160 ordering => return ordering,
155161 }
156162 }
@@ -185,6 +191,8 @@ mod tests {
185191 fn test_compare_prefixed_slice ( ) {
186192 use std:: cmp:: Ordering :: { Equal , Greater , Less } ;
187193
194+ assert_eq ! ( Greater , compare_prefixed_slice( & [ 0 , 161 ] , & [ ] , & [ 0 ] ) ) ;
195+
188196 assert_eq ! ( Equal , compare_prefixed_slice( b"abc" , b"xyz" , b"abcxyz" ) ) ;
189197 assert_eq ! ( Equal , compare_prefixed_slice( b"abc" , b"" , b"abc" ) ) ;
190198 assert_eq ! ( Equal , compare_prefixed_slice( b"abc" , b"abc" , b"abcabc" ) ) ;
0 commit comments