@@ -296,6 +296,87 @@ fn test_io_stdin() -> std::io::Result<()> {
296
296
Ok ( ( ) )
297
297
}
298
298
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
+
299
380
use std:: fs;
300
381
301
382
fn test_fs ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
@@ -414,6 +495,12 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
414
495
match test_io_stdin() {
415
496
Ok(_) => println!("complete"),
416
497
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),
417
504
}*/
418
505
419
506
println ! ( "test_fs..." ) ;
0 commit comments