summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1997-10-20 23:24:07 (GMT)
committerGuido van Rossum <guido@python.org>1997-10-20 23:24:07 (GMT)
commited1100f3b63c79cc3da075b5c23f3d4fe25270c5 (patch)
tree5f97524297902d4a27767e06e794a2a1a24874d8 /Python
parentf6a84db034cdc5a403715391fc04294c5819417a (diff)
downloadcpython-ed1100f3b63c79cc3da075b5c23f3d4fe25270c5.zip
cpython-ed1100f3b63c79cc3da075b5c23f3d4fe25270c5.tar.gz
cpython-ed1100f3b63c79cc3da075b5c23f3d4fe25270c5.tar.bz2
Don't use sscanf(s, "%x", &c) to parse \xX... escapes; hardcode it.
Diffstat (limited to 'Python')
-rw-r--r--Python/compile.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/Python/compile.c b/Python/compile.c
index 80b7371..b4658e4 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -36,7 +36,6 @@ PERFORMANCE OF THIS SOFTWARE.
XXX (it's currently the first item of the co_const tuple)
XXX Generate simple jump for break/return outside 'try...finally'
XXX Allow 'continue' inside try-finally
- XXX New 1-byte opcode for loading None
XXX New opcode for loading the initial index for a for loop
XXX other JAR tricks?
*/
@@ -922,11 +921,19 @@ parsestr(s)
break;
case 'x':
if (isxdigit(Py_CHARMASK(*s))) {
- sscanf(s, "%x", &c);
- *p++ = c;
+ unsigned int x = 0;
do {
+ c = Py_CHARMASK(*s);
s++;
+ x = (x<<4) & ~0xF;
+ if (isdigit(c))
+ x += c - '0';
+ else if (islower(c))
+ x += 10 + c - 'a';
+ else
+ x += 10 + c - 'A';
} while (isxdigit(Py_CHARMASK(*s)));
+ *p++ = x;
break;
}
/* FALLTHROUGH */