@@ -542,6 +542,8 @@ fn test_issue_14() {
542
542
// data is treated as invalid.
543
543
#[ test]
544
544
fn test_issue_7 ( ) {
545
+ use std:: io:: ErrorKind :: UnexpectedEof ;
546
+
545
547
let mut c = Cursor :: new ( Vec :: new ( ) ) ;
546
548
let test_arr = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ;
547
549
let test_arr_2 = [ 2 , 4 , 8 , 16 , 32 , 64 , 128 , 127 , 126 , 125 , 124 ] ;
@@ -564,17 +566,56 @@ fn test_issue_7() {
564
566
assert ! ( r. read_packet( ) . unwrap( ) . is_none( ) ) ;
565
567
}
566
568
567
- // Non-Ogg data should return an error.
569
+ // Truncated data should return the UnexpectedEof error.
568
570
let c = Cursor :: new ( vec ! [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ) ;
569
571
{
570
572
let mut r = PacketReader :: new ( c) ;
571
- assert ! ( matches!( r. read_packet( ) , Err ( OggReadError :: NoCapturePatternFound ) ) ) ;
573
+ assert ! ( matches!( r. read_packet( ) ,
574
+ Err ( OggReadError :: ReadError ( e) ) if e. kind( ) == UnexpectedEof ) ) ;
572
575
}
573
576
574
- // Empty data is considered non-Ogg data .
577
+ // Empty data should return the UnexpectedEof error .
575
578
let c = Cursor :: new ( & [ ] ) ;
576
579
{
577
580
let mut r = PacketReader :: new ( c) ;
578
- assert ! ( matches!( r. read_packet( ) , Err ( OggReadError :: NoCapturePatternFound ) ) ) ;
581
+ assert ! ( matches!( r. read_packet( ) ,
582
+ Err ( OggReadError :: ReadError ( e) ) if e. kind( ) == UnexpectedEof ) ) ;
579
583
}
580
584
}
585
+
586
+ #[ test]
587
+ fn test_read_with_append ( ) {
588
+ use reading:: PacketReader ;
589
+ use OggReadError ;
590
+ use std:: io:: ErrorKind :: UnexpectedEof ;
591
+
592
+ let first_chunk =
593
+ [ 79 , 103 , 103 , 83 , 0 , 2 , 0 , 0 , 0 ,
594
+ 0 , 0 , 0 , 0 , 0 , 14 , 247 , 95 , 68 , 0 ] ;
595
+ let second_chunk =
596
+ [ 0 , 0 , 0 , 139 , 130 , 226 , 240 , 1 , 30 , 1 , 118 , 111 , 114 ,
597
+ 98 , 105 , 115 , 0 , 0 , 0 , 0 , 1 , 128 , 187 , 0 , 0 , 0 , 0 , 0 ,
598
+ 0 , 128 , 56 , 1 , 0 , 0 , 0 , 0 , 0 , 184 , 1 ] ;
599
+
600
+ let cursor = Cursor :: new ( Vec :: new ( ) ) ;
601
+ let mut packet_reader = PacketReader :: new ( cursor) ;
602
+
603
+ // Add the first chunk
604
+ let cursor = packet_reader. get_mut ( ) ;
605
+ cursor. get_mut ( ) . extend ( first_chunk) ;
606
+ // Attempt to read an incomplete page
607
+ assert ! ( matches!( packet_reader. read_packet_expected( ) ,
608
+ Err ( OggReadError :: ReadError ( ref e) ) if e. kind( ) == UnexpectedEof
609
+ ) ) ;
610
+
611
+ // Add the second chunk
612
+ let cursor = packet_reader. get_mut ( ) ;
613
+ cursor. get_mut ( ) . extend ( second_chunk) ;
614
+ // Attempt to read a complete page
615
+ let _pkt = packet_reader. read_packet_expected ( ) . unwrap ( ) ;
616
+
617
+ // No data left in the buffer
618
+ assert ! ( matches!( packet_reader. read_packet_expected( ) ,
619
+ Err ( OggReadError :: ReadError ( ref e) ) if e. kind( ) == UnexpectedEof
620
+ ) ) ;
621
+ }
0 commit comments