diff options
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_attr/src/builtin.rs | 12 | ||||
| -rw-r--r-- | compiler/rustc_lexer/src/tests.rs | 17 |
2 files changed, 27 insertions, 2 deletions
diff --git a/compiler/rustc_attr/src/builtin.rs b/compiler/rustc_attr/src/builtin.rs index 613320087d2..8a134bf7f96 100644 --- a/compiler/rustc_attr/src/builtin.rs +++ b/compiler/rustc_attr/src/builtin.rs @@ -603,10 +603,18 @@ pub fn eval_condition( match cfg.name_or_empty() { sym::any => mis .iter() - .any(|mi| eval_condition(mi.meta_item().unwrap(), sess, features, eval)), + // We don't use any() here, because we want to evaluate all cfg condition + // as eval_condition can (and does) extra checks + .fold(false, |res, mi| { + res | eval_condition(mi.meta_item().unwrap(), sess, features, eval) + }), sym::all => mis .iter() - .all(|mi| eval_condition(mi.meta_item().unwrap(), sess, features, eval)), + // We don't use all() here, because we want to evaluate all cfg condition + // as eval_condition can (and does) extra checks + .fold(true, |res, mi| { + res & eval_condition(mi.meta_item().unwrap(), sess, features, eval) + }), sym::not => { if mis.len() != 1 { struct_span_err!( diff --git a/compiler/rustc_lexer/src/tests.rs b/compiler/rustc_lexer/src/tests.rs index 94017b7b286..548de67449a 100644 --- a/compiler/rustc_lexer/src/tests.rs +++ b/compiler/rustc_lexer/src/tests.rs @@ -67,6 +67,23 @@ fn test_unterminated_no_pound() { } #[test] +fn test_too_many_hashes() { + let max_count = u16::MAX; + let mut hashes: String = "#".repeat(max_count.into()); + + // Valid number of hashes (65535 = 2^16 - 1), but invalid string. + check_raw_str(&hashes, max_count, Some(RawStrError::InvalidStarter { bad_char: '\u{0}' })); + + // One more hash sign (65536 = 2^16) becomes too many. + hashes.push('#'); + check_raw_str( + &hashes, + 0, + Some(RawStrError::TooManyDelimiters { found: usize::from(max_count) + 1 }), + ); +} + +#[test] fn test_valid_shebang() { // https://github.com/rust-lang/rust/issues/70528 let input = "#!/usr/bin/rustrun\nlet x = 5;"; |
