Fix panic with 8 in octal escape (#8356)

**Summary** The digits for an octal escape are 0 to 7, not 0 to 8,
fixing the panic in #8355

**Test plan** Regression test parser fixture
This commit is contained in:
konsti 2023-10-30 14:42:15 +01:00 committed by GitHub
parent b6c4074836
commit daea870c3c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 1 deletions

View file

@ -0,0 +1,28 @@
---
source: crates/ruff_python_parser/src/string.rs
expression: parse_ast
---
[
Assign(
StmtAssign {
range: 0..16,
targets: [
Name(
ExprName {
range: 0..4,
id: "bold",
ctx: Store,
},
),
],
value: StringLiteral(
ExprStringLiteral {
range: 7..16,
value: "\u{3}8[1m",
unicode: false,
implicit_concatenated: false,
},
),
},
),
]

View file

@ -114,7 +114,7 @@ impl<'a> StringParser<'a> {
let mut len = 1;
while len < 3 {
let Some(b'0'..=b'8') = self.peek_byte() else {
let Some(b'0'..=b'7') = self.peek_byte() else {
break;
};
@ -885,6 +885,15 @@ mod tests {
insta::assert_debug_snapshot!(parse_ast);
}
/// <https://github.com/astral-sh/ruff/issues/8355>
#[test]
fn test_dont_panic_on_8_in_octal_escape() {
let source = r"bold = '\038[1m'";
let parse_ast = parse_suite(source, "<test>").unwrap();
insta::assert_debug_snapshot!(parse_ast);
}
macro_rules! test_aliases_parse {
($($name:ident: $alias:expr,)*) => {
$(