-
-
Notifications
You must be signed in to change notification settings - Fork 14.3k
Closed
Description
If we File::open() a directory, then wrap it in BufReader, call lines() and then filter_map() only successful reads, the programs never finishes:
use std::fs::File;
use std::io::{BufRead, BufReader};
fn main() {
let file = File::open(".").unwrap();
let reader = BufReader::new(file);
let lines = reader.lines();
// Comment to make it output infinite errors
let lines = lines.filter_map(|s| s.ok());
for line in lines {
println!("Line: {:?}", line);
}
println!("Finished");
}"Finished" is never printed. No "Line: ..." lines are printed. Instead 100% CPU is consumed.
Commenting the filter_map() line makes it output infinite Line: Err(Error { repr: Os { code: 21, message: "Is a directory" } }).
https://play.rust-lang.org/?gist=f6f0fdbcc83b9630b493c025e3432d31&version=stable
Looks similar to #34703, but not sure it's because of same reasons.
Not sure what would a proper fix would be, but I think I'd prefer lines() to output a single item with error instead of spamming it.
Metadata
Metadata
Assignees
Labels
No labels