mirror of
https://git.proxmox.com/git/rustc
synced 2025-08-20 11:59:54 +00:00
54 lines
1.5 KiB
Rust
54 lines
1.5 KiB
Rust
use syn::parenthesized;
|
|
use syn::parse::{discouraged::Speculative, Parse, ParseStream, Parser, Result};
|
|
|
|
#[test]
|
|
#[should_panic(expected = "Fork was not derived from the advancing parse stream")]
|
|
fn smuggled_speculative_cursor_between_sources() {
|
|
struct BreakRules;
|
|
impl Parse for BreakRules {
|
|
fn parse(input1: ParseStream) -> Result<Self> {
|
|
let nested = |input2: ParseStream| {
|
|
input1.advance_to(&input2);
|
|
Ok(Self)
|
|
};
|
|
nested.parse_str("")
|
|
}
|
|
}
|
|
|
|
syn::parse_str::<BreakRules>("").unwrap();
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic(expected = "Fork was not derived from the advancing parse stream")]
|
|
fn smuggled_speculative_cursor_between_brackets() {
|
|
struct BreakRules;
|
|
impl Parse for BreakRules {
|
|
fn parse(input: ParseStream) -> Result<Self> {
|
|
let a;
|
|
let b;
|
|
parenthesized!(a in input);
|
|
parenthesized!(b in input);
|
|
a.advance_to(&b);
|
|
Ok(Self)
|
|
}
|
|
}
|
|
|
|
syn::parse_str::<BreakRules>("()()").unwrap();
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic(expected = "Fork was not derived from the advancing parse stream")]
|
|
fn smuggled_speculative_cursor_into_brackets() {
|
|
struct BreakRules;
|
|
impl Parse for BreakRules {
|
|
fn parse(input: ParseStream) -> Result<Self> {
|
|
let a;
|
|
parenthesized!(a in input);
|
|
input.advance_to(&a);
|
|
Ok(Self)
|
|
}
|
|
}
|
|
|
|
syn::parse_str::<BreakRules>("()").unwrap();
|
|
}
|