summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-04-24 18:07:05 +0000
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-04-24 18:07:05 +0000
commitb88004d9b100a285c6cf6563a4a74796d36e8707 (patch)
tree79ea298ff6f53573d28aa760bcbe9d4456e6dc3f
parent5cbdbc3b3550ee7ae6cabe7975c6aa6bbb31fc0b (diff)
downloadcpython-b88004d9b100a285c6cf6563a4a74796d36e8707.tar.gz
Issue2681: the literal 0o8 was wrongly accepted, and evaluated as float(0.0).
This happened only when 8 is the first digit. Credits go to Lukas Meuser.
-rw-r--r--Lib/test/test_compile.py2
-rw-r--r--Misc/NEWS3
-rw-r--r--Parser/tokenizer.c2
3 files changed, 5 insertions, 2 deletions
diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py
index e8695acc46..e2a0ebec07 100644
--- a/Lib/test/test_compile.py
+++ b/Lib/test/test_compile.py
@@ -183,7 +183,7 @@ if 1:
for arg in ["077787", "0xj", "0x.", "0e", "090000000000000",
"080000000000000", "000000000000009", "000000000000008",
"0b42", "0BADCAFE", "0o123456789", "0b1.1", "0o4.2",
- "0b101j2", "0o153j2", "0b100e1", "0o777e1"]:
+ "0b101j2", "0o153j2", "0b100e1", "0o777e1", "0o8", "0o78"]:
self.assertRaises(SyntaxError, eval, arg)
self.assertEqual(eval("0777"), 511)
diff --git a/Misc/NEWS b/Misc/NEWS
index 3930929267..52aee8026f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 2.6 alpha 3?
Core and builtins
-----------------
+- Issue #2681: The octal literal ``0o8`` was incorrecly acctepted. Now it
+ properly raises a SyntaxError.
+
- Patch #2617: Reserved -J and -X arguments for Jython, IronPython and other
implementations of Python.
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index 29fb114291..1d0a4aa3f2 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -1351,7 +1351,7 @@ tok_get(register struct tok_state *tok, char **p_start, char **p_end)
else if (c == 'o' || c == 'O') {
/* Octal */
c = tok_nextc(tok);
- if (c < '0' || c > '8') {
+ if (c < '0' || c >= '8') {
tok->done = E_TOKEN;
tok_backup(tok, c);
return ERRORTOKEN;