mirror of
https://github.com/askama-rs/askama.git
synced 2025-09-28 05:21:14 +00:00

According to <https://doc.rust-lang.org/reference/tokens.html#string-literals>. Fixes <https://github.com/askama-rs/askama/issues/482>. Fixes <https://issues.oss-fuzz.com/issues/424227903>.
121 lines
3.2 KiB
Rust
121 lines
3.2 KiB
Rust
use askama::Template;
|
|
|
|
// Strings must be closed
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ "hello world }}"#)]
|
|
struct Unclosed1;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ "hello world\" }}"#)]
|
|
struct Unclosed2;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ b"hello world }}"#)]
|
|
struct Unclosed3;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ b"hello world\" }}"#)]
|
|
struct Unclosed4;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ c"hello world }}"#)]
|
|
struct Unclosed5;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ c"hello world\" }}"#)]
|
|
struct Unclosed6;
|
|
|
|
// Unprefix string literals must not contain hex escapes sequences higher than `\x7f`
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ "hello \x80 world" }}"#)]
|
|
struct HighAscii1;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ "hello \xff world" }}"#)]
|
|
struct HighAscii2;
|
|
|
|
// Cstring literals must not contain null characters
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ "hello \0 world" }}"#)]
|
|
struct NulEscapeSequence1;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ "hello \x00 world" }}"#)]
|
|
struct NulEscapeSequence2;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ "hello \u{0} world" }}"#)]
|
|
struct NulEscapeSequence3;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = "{{ \"hello \0 world\" }}")]
|
|
struct NulCharacter;
|
|
|
|
// Binary slice literals must not contain non-ASCII characters
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ "hello 😉 world" }}"#)]
|
|
struct UnicodeCharacter;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ "hello \u{128521} world" }}"#)]
|
|
struct UnicodeEscapeSequence;
|
|
|
|
// Surrogate characters (even if paired) are not allowed at all
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ "hello \u{d83d}\u{de09} world" }}"#)]
|
|
struct SurrogatePaired1;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ "hello \u{d83d} world" }}"#)]
|
|
struct SurrogateLow1;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ "hello \u{de09} world" }}"#)]
|
|
struct SurrogateHigh1;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ b"hello \u{d83d}\u{de09} world" }}"#)]
|
|
struct SurrogatePaired2;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ b"hello \u{d83d} world" }}"#)]
|
|
struct SurrogateLow2;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ b"hello \u{de09} world" }}"#)]
|
|
struct SurrogateHigh2;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ c"hello \u{d83d}\u{de09} world" }}"#)]
|
|
struct SurrogatePaired3;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ c"hello \u{d83d} world" }}"#)]
|
|
struct SurrogateLow3;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = r#"{{ c"hello \u{de09} world" }}"#)]
|
|
struct SurrogateHigh3;
|
|
|
|
// CR (\r) is only allowed if followed by NL (\n)
|
|
// (regression test for <https://github.com/askama-rs/askama/issues/482>)
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = "{{ \"hello \r world\" }}")]
|
|
struct UnpairedCr;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = "{{ b\"hello \r world\" }}")]
|
|
struct UnpairedCrInBytes;
|
|
|
|
#[derive(Template)]
|
|
#[template(ext = "txt", source = "{{ c\"hello \r world\" }}")]
|
|
struct UnpairedCrInCstring;
|
|
|
|
fn main() {}
|