@@ -296,6 +296,87 @@ fn test_io_stdin() -> std::io::Result<()> {
296296 Ok ( ( ) )
297297}
298298
299+ use tokio:: io:: { AsyncReadExt , AsyncBufReadExt } ;
300+
301+ async fn test_tokio_stdin ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
302+
303+ // --- async reading from stdin ---
304+
305+ {
306+ let mut stdin = tokio:: io:: stdin ( ) ; // $ MISSING: Alert[rust/summary/taint-sources]
307+ let mut buffer = [ 0u8 ; 100 ] ;
308+ let _bytes = stdin. read ( & mut buffer) . await ?;
309+ sink ( & buffer) ; // $ MISSING: hasTaintFlow
310+ }
311+
312+ {
313+ let mut stdin = tokio:: io:: stdin ( ) ; // $ MISSING: Alert[rust/summary/taint-sources]
314+ let mut buffer = Vec :: < u8 > :: new ( ) ;
315+ let _bytes = stdin. read_to_end ( & mut buffer) . await ?;
316+ sink ( & buffer) ; // $ MISSING: hasTaintFlow
317+ }
318+
319+ {
320+ let mut stdin = tokio:: io:: stdin ( ) ; // $ MISSING: Alert[rust/summary/taint-sources]
321+ let mut buffer = String :: new ( ) ;
322+ let _bytes = stdin. read_to_string ( & mut buffer) . await ?;
323+ sink ( & buffer) ; // $ MISSING: hasTaintFlow
324+ }
325+
326+ {
327+ let mut stdin = tokio:: io:: stdin ( ) ; // $ MISSING: Alert[rust/summary/taint-sources]
328+ let mut buffer = [ 0 ; 100 ] ;
329+ stdin. read_exact ( & mut buffer) . await ?;
330+ sink ( & buffer) ; // $ MISSING: hasTaintFlow
331+ }
332+
333+ // --- async reading from stdin (BufReader) ---
334+
335+ {
336+ let mut reader = tokio:: io:: BufReader :: new ( tokio:: io:: stdin ( ) ) ; // $ MISSING: Alert[rust/summary/taint-sources]
337+ let data = reader. fill_buf ( ) . await ?;
338+ sink ( & data) ; // $ MISSING: hasTaintFlow
339+ }
340+
341+ {
342+ let reader = tokio:: io:: BufReader :: new ( tokio:: io:: stdin ( ) ) ; // $ MISSING: Alert[rust/summary/taint-sources]
343+ let data = reader. buffer ( ) ;
344+ sink ( & data) ; // $ MISSING: hasTaintFlow
345+ }
346+
347+ {
348+ let mut buffer = String :: new ( ) ;
349+ let mut reader = tokio:: io:: BufReader :: new ( tokio:: io:: stdin ( ) ) ; // $ MISSING: Alert[rust/summary/taint-sources]
350+ reader. read_line ( & mut buffer) . await ?;
351+ sink ( & buffer) ; // $ MISSING: hasTaintFlow
352+ }
353+
354+ {
355+ let mut buffer = Vec :: < u8 > :: new ( ) ;
356+ let mut reader = tokio:: io:: BufReader :: new ( tokio:: io:: stdin ( ) ) ; // $ MISSING: Alert[rust/summary/taint-sources]
357+ reader. read_until ( b',' , & mut buffer) . await ?;
358+ sink ( & buffer) ; // $ MISSING: hasTaintFlow
359+ sink ( buffer[ 0 ] ) ; // $ MISSING: hasTaintFlow
360+ }
361+
362+ {
363+ let mut reader_split = tokio:: io:: BufReader :: new ( tokio:: io:: stdin ( ) ) . split ( b',' ) ; // $ MISSING: Alert[rust/summary/taint-sources]
364+ while let Some ( chunk) = reader_split. next_segment ( ) . await ? {
365+ sink ( chunk) ; // $ MISSING: hasTaintFlow
366+ }
367+ }
368+
369+ {
370+ let reader = tokio:: io:: BufReader :: new ( tokio:: io:: stdin ( ) ) ; // $ MISSING: Alert[rust/summary/taint-sources]
371+ let mut lines = reader. lines ( ) ;
372+ while let Some ( line) = lines. next_line ( ) . await ? {
373+ sink ( line) ; // $ hasTai
374+ }
375+ }
376+
377+ Ok ( ( ) )
378+ }
379+
299380use std:: fs;
300381
301382fn test_fs ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
@@ -414,6 +495,12 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
414495 match test_io_stdin() {
415496 Ok(_) => println!("complete"),
416497 Err(e) => println!("error: {}", e),
498+ }
499+
500+ println!("test_tokio_stdin...");
501+ match futures::executor::block_on(test_tokio_stdin()) {
502+ Ok(_) => println!("complete"),
503+ Err(e) => println!("error: {}", e),
417504 }*/
418505
419506 println ! ( "test_fs..." ) ;
0 commit comments