@@ -177,7 +177,11 @@ impl Seek for MemReader {
177
177
178
178
impl Buffer for MemReader {
179
179
fn fill < ' a > ( & ' a mut self ) -> IoResult < & ' a [ u8 ] > {
180
- Ok ( self . buf . slice_from ( self . pos ) )
180
+ if self . pos < self . buf . len ( ) {
181
+ Ok ( self . buf . slice_from ( self . pos ) )
182
+ } else {
183
+ Err ( io:: standard_error ( io:: EndOfFile ) )
184
+ }
181
185
}
182
186
fn consume ( & mut self , amt : uint ) { self . pos += amt; }
183
187
}
@@ -308,7 +312,11 @@ impl<'a> Seek for BufReader<'a> {
308
312
309
313
impl < ' a > Buffer for BufReader < ' a > {
310
314
fn fill < ' a > ( & ' a mut self ) -> IoResult < & ' a [ u8 ] > {
311
- Ok ( self . buf . slice_from ( self . pos ) )
315
+ if self . pos < self . buf . len ( ) {
316
+ Ok ( self . buf . slice_from ( self . pos ) )
317
+ } else {
318
+ Err ( io:: standard_error ( io:: EndOfFile ) )
319
+ }
312
320
}
313
321
fn consume ( & mut self , amt : uint ) { self . pos += amt; }
314
322
}
@@ -421,6 +429,10 @@ mod test {
421
429
assert_eq ! ( reader. read( buf) , Ok ( 3 ) ) ;
422
430
assert_eq ! ( buf. slice( 0 , 3 ) , [ 5 , 6 , 7 ] ) ;
423
431
assert ! ( reader. read( buf) . is_err( ) ) ;
432
+ let mut reader = MemReader :: new ( ~[ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ] ) ;
433
+ assert_eq ! ( reader. read_until( 3 ) . unwrap( ) , ~[ 0 , 1 , 2 , 3 ] ) ;
434
+ assert_eq ! ( reader. read_until( 3 ) . unwrap( ) , ~[ 4 , 5 , 6 , 7 ] ) ;
435
+ assert ! ( reader. read( buf) . is_err( ) ) ;
424
436
}
425
437
426
438
#[ test]
@@ -441,6 +453,10 @@ mod test {
441
453
assert_eq ! ( reader. read( buf) , Ok ( 3 ) ) ;
442
454
assert_eq ! ( buf. slice( 0 , 3 ) , [ 5 , 6 , 7 ] ) ;
443
455
assert ! ( reader. read( buf) . is_err( ) ) ;
456
+ let mut reader = BufReader :: new ( in_buf) ;
457
+ assert_eq ! ( reader. read_until( 3 ) . unwrap( ) , ~[ 0 , 1 , 2 , 3 ] ) ;
458
+ assert_eq ! ( reader. read_until( 3 ) . unwrap( ) , ~[ 4 , 5 , 6 , 7 ] ) ;
459
+ assert ! ( reader. read( buf) . is_err( ) ) ;
444
460
}
445
461
446
462
#[ test]
0 commit comments