Skip to content

Commit

Permalink
Fix panic with 8 in octal escape (#8356)
Browse files Browse the repository at this point in the history
**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
  • Loading branch information
konstin committed Oct 30, 2023
1 parent b6c4074 commit daea870
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -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,
},
),
},
),
]
11 changes: 10 additions & 1 deletion crates/ruff_python_parser/src/string.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};

Expand Down Expand Up @@ -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,)*) => {
$(
Expand Down

0 comments on commit daea870

Please sign in to comment.