Skip to content

Commit c8d0f5c

Browse files
committed
Generate SyntaxError at integer starting with 0
Generate syntaxError at integer starting with 0, not zero Fixes RustPython#1422
1 parent 3856e93 commit c8d0f5c

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

parser/src/lexer.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ pub use super::token::Tok;
88
use crate::error::{LexicalError, LexicalErrorType};
99
use crate::location::Location;
1010
use num_bigint::BigInt;
11+
use num_traits::identities::Zero;
1112
use num_traits::Num;
1213
use std::cmp::Ordering;
1314
use std::collections::HashMap;
@@ -352,7 +353,7 @@ where
352353
/// Lex a normal number, that is, no octal, hex or binary number.
353354
fn lex_normal_number(&mut self) -> LexResult {
354355
let start_pos = self.get_pos();
355-
356+
let start_is_zero = self.chr0 == Some('0');
356357
// Normal number:
357358
let mut value_text = self.radix_run(10);
358359

@@ -403,6 +404,12 @@ where
403404
} else {
404405
let end_pos = self.get_pos();
405406
let value = value_text.parse::<BigInt>().unwrap();
407+
if start_is_zero && !value.is_zero() {
408+
return Err(LexicalError {
409+
error: LexicalErrorType::OtherError("Invalid Token".to_string()),
410+
location: self.get_pos(),
411+
});
412+
}
406413
Ok((start_pos, Tok::Int { value }, end_pos))
407414
}
408415
}

0 commit comments

Comments
 (0)