@@ -466,6 +466,57 @@ fn test_io_file() -> std::io::Result<()> {
466466 Ok ( ( ) )
467467}
468468
469+ async fn test_tokio_file ( ) -> std:: io:: Result < ( ) > {
470+ // --- file ---
471+
472+ let mut file = tokio:: fs:: File :: open ( "file.txt" ) . await ?; // $ MISSING: Alert[rust/summary/taint-sources]
473+
474+ {
475+ let mut buffer = [ 0u8 ; 100 ] ;
476+ let _bytes = file. read ( & mut buffer) . await ?;
477+ sink ( & buffer) ; // $ MISSING: hasTaintFlow="file.txt"
478+ }
479+
480+ {
481+ let mut buffer = Vec :: < u8 > :: new ( ) ;
482+ let _bytes = file. read_to_end ( & mut buffer) . await ?;
483+ sink ( & buffer) ; // $ MISSING: hasTaintFlow="file.txt"
484+ }
485+
486+ {
487+ let mut buffer = String :: new ( ) ;
488+ let _bytes = file. read_to_string ( & mut buffer) . await ?;
489+ sink ( & buffer) ; // $ MISSING: hasTaintFlow="file.txt"
490+ }
491+
492+ {
493+ let mut buffer = [ 0 ; 100 ] ;
494+ file. read_exact ( & mut buffer) . await ?;
495+ sink ( & buffer) ; // $ MISSING: hasTaintFlow="file.txt"
496+ }
497+
498+ // --- misc operations ---
499+
500+ {
501+ let mut buffer = String :: new ( ) ;
502+ let file1 = tokio:: fs:: File :: open ( "file.txt" ) . await ?; // $ MISSING: Alert[rust/summary/taint-sources]
503+ let file2 = tokio:: fs:: File :: open ( "another_file.txt" ) . await ?; // $ MISSING: [rust/summary/taint-sources]
504+ let mut reader = file1. chain ( file2) ;
505+ reader. read_to_string ( & mut buffer) . await ?;
506+ sink ( & buffer) ; // $ MISSING: hasTaintFlow="file.txt" hasTaintFlow="another_file.txt"
507+ }
508+
509+ {
510+ let mut buffer = String :: new ( ) ;
511+ let file1 = tokio:: fs:: File :: open ( "file.txt" ) . await ?; // $ MISSING: Alert[rust/summary/taint-sources]
512+ let mut reader = file1. take ( 100 ) ;
513+ reader. read_to_string ( & mut buffer) . await ?;
514+ sink ( & buffer) ; // $ MISSING: hasTaintFlow="file.txt"
515+ }
516+
517+ Ok ( ( ) )
518+ }
519+
469520#[ tokio:: main]
470521async fn main ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
471522 let case = std:: env:: args ( ) . nth ( 1 ) . unwrap_or ( String :: from ( "1" ) ) . parse :: < i64 > ( ) . unwrap ( ) ; // $ Alert[rust/summary/taint-sources]
@@ -515,5 +566,11 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
515566 Err ( e) => println ! ( "error: {}" , e) ,
516567 }
517568
569+ println ! ( "test_tokio_file..." ) ;
570+ match futures:: executor:: block_on ( test_tokio_file ( ) ) {
571+ Ok ( _) => println ! ( "complete" ) ,
572+ Err ( e) => println ! ( "error: {}" , e) ,
573+ }
574+
518575 Ok ( ( ) )
519576}
0 commit comments