From edeea0bb7ac982e89cd2ec84a1b7874f2ffdcc8b Mon Sep 17 00:00:00 2001 From: Ma_124 Date: Wed, 6 Apr 2022 21:55:42 +0200 Subject: [PATCH] subscriber: fix issue with `EnvFilter::builder().parse` --- tracing-subscriber/src/filter/env/builder.rs | 22 +++++++++++--------- tracing-subscriber/src/filter/env/mod.rs | 8 +++++++ 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/tracing-subscriber/src/filter/env/builder.rs b/tracing-subscriber/src/filter/env/builder.rs index 128b1868e8..d75653de20 100644 --- a/tracing-subscriber/src/filter/env/builder.rs +++ b/tracing-subscriber/src/filter/env/builder.rs @@ -133,16 +133,17 @@ impl Builder { /// Returns a new [`EnvFilter`] from the directives in the given string, /// *ignoring* any that are invalid. pub fn parse_lossy>(&self, dirs: S) -> EnvFilter { - let directives = - dirs.as_ref() - .split(',') - .filter_map(|s| match Directive::parse(s, self.regex) { - Ok(d) => Some(d), - Err(err) => { - eprintln!("ignoring `{}`: {}", s, err); - None - } - }); + let directives = dirs + .as_ref() + .split(',') + .filter(|s| !s.is_empty()) + .filter_map(|s| match Directive::parse(s, self.regex) { + Ok(d) => Some(d), + Err(err) => { + eprintln!("ignoring `{}`: {}", s, err); + None + } + }); self.from_directives(directives) } @@ -155,6 +156,7 @@ impl Builder { } let directives = dirs .split(',') + .filter(|s| !s.is_empty()) .map(|s| Directive::parse(s, self.regex)) .collect::, _>>()?; Ok(self.from_directives(directives)) diff --git a/tracing-subscriber/src/filter/env/mod.rs b/tracing-subscriber/src/filter/env/mod.rs index a2fc0d112b..6b1a9fa4c3 100644 --- a/tracing-subscriber/src/filter/env/mod.rs +++ b/tracing-subscriber/src/filter/env/mod.rs @@ -920,4 +920,12 @@ mod tests { [span2{bar=2 baz=false}],crate2[{quux=\"quuux\"}]=debug", ); } + + #[test] + fn parse_empty_string() { + // There is no corresponding test for [`Builder::parse_lossy`] as failed + // parsing does not produce any observable side effects. If this test fails + // check that [`Builder::parse_lossy`] is behaving correctly as well. + assert!(EnvFilter::builder().parse("").is_ok()); + } }