@@ -348,3 +348,55 @@ mod test_str_ext {
348
348
assert ! ( !result. is_heap_allocated( ) ) ;
349
349
}
350
350
}
351
+ #[ cfg( feature = "borsh" ) ]
352
+
353
+ mod borsh_tests {
354
+ use borsh:: BorshDeserialize ;
355
+ use smol_str:: { SmolStr , ToSmolStr } ;
356
+ use std:: io:: Cursor ;
357
+
358
+ #[ test]
359
+ fn borsh_serialize_stack ( ) {
360
+ let smolstr_on_stack = "aßΔCaßδc" . to_smolstr ( ) ;
361
+ let mut buffer = Vec :: new ( ) ;
362
+ borsh:: BorshSerialize :: serialize ( & smolstr_on_stack, & mut buffer) . unwrap ( ) ;
363
+ let mut cursor = Cursor :: new ( buffer) ;
364
+ let decoded: SmolStr = borsh:: BorshDeserialize :: deserialize_reader ( & mut cursor) . unwrap ( ) ;
365
+ assert_eq ! ( smolstr_on_stack, decoded) ;
366
+ }
367
+ #[ test]
368
+ fn borsh_serialize_heap ( ) {
369
+ let smolstr_on_heap = "aßΔCaßδcaßΔCaßδcaßΔCaßδcaßΔCaßδcaßΔCaßδcaßΔCaßδcaßΔCaßδcaßΔCaßδcaßΔCaßδcaßΔCaßδcaßΔCaßδc" . to_smolstr ( ) ;
370
+ let mut buffer = Vec :: new ( ) ;
371
+ borsh:: BorshSerialize :: serialize ( & smolstr_on_heap, & mut buffer) . unwrap ( ) ;
372
+ let mut cursor = Cursor :: new ( buffer) ;
373
+ let decoded: SmolStr = borsh:: BorshDeserialize :: deserialize_reader ( & mut cursor) . unwrap ( ) ;
374
+ assert_eq ! ( smolstr_on_heap, decoded) ;
375
+ }
376
+ #[ test]
377
+ fn borsh_non_utf8_stack ( ) {
378
+ let invalid_utf8: Vec < u8 > = vec ! [ 0xF0 , 0x9F , 0x8F ] ; // Incomplete UTF-8 sequence
379
+
380
+ let wrong_utf8 = SmolStr :: from ( unsafe { String :: from_utf8_unchecked ( invalid_utf8) } ) ;
381
+ let mut buffer = Vec :: new ( ) ;
382
+ borsh:: BorshSerialize :: serialize ( & wrong_utf8, & mut buffer) . unwrap ( ) ;
383
+ let mut cursor = Cursor :: new ( buffer) ;
384
+ let result = SmolStr :: deserialize_reader ( & mut cursor) ;
385
+ assert ! ( result. is_err( ) ) ;
386
+ }
387
+
388
+ #[ test]
389
+ fn borsh_non_utf8_heap ( ) {
390
+ let invalid_utf8: Vec < u8 > = vec ! [
391
+ 0xC1 , 0x8A , 0x5F , 0xE2 , 0x3A , 0x9E , 0x3B , 0xAA , 0x01 , 0x08 , 0x6F , 0x2F , 0xC0 , 0x32 ,
392
+ 0xAB , 0xE1 , 0x9A , 0x2F , 0x4A , 0x3F , 0x25 , 0x0D , 0x8A , 0x2A , 0x19 , 0x11 , 0xF0 , 0x7F ,
393
+ 0x0E , 0x80 ,
394
+ ] ;
395
+ let wrong_utf8 = SmolStr :: from ( unsafe { String :: from_utf8_unchecked ( invalid_utf8) } ) ;
396
+ let mut buffer = Vec :: new ( ) ;
397
+ borsh:: BorshSerialize :: serialize ( & wrong_utf8, & mut buffer) . unwrap ( ) ;
398
+ let mut cursor = Cursor :: new ( buffer) ;
399
+ let result = SmolStr :: deserialize_reader ( & mut cursor) ;
400
+ assert ! ( result. is_err( ) ) ;
401
+ }
402
+ }
0 commit comments