From: Stefan Krah Date: Thu, 24 Jun 2010 09:33:05 +0000 (+0000) Subject: Issue #9020: The Py_IS* macros from pyctype.h should generally only be X-Git-Tag: v2.7~70 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3db4161011cbf6988102228ffc7e5213e680241e;p=python Issue #9020: The Py_IS* macros from pyctype.h should generally only be used with signed/unsigned char arguments. For integer arguments, EOF has to be handled separately. --- diff --git a/Include/pyctype.h b/Include/pyctype.h index 0d211ec799..c5cc61431d 100644 --- a/Include/pyctype.h +++ b/Include/pyctype.h @@ -11,6 +11,9 @@ extern const unsigned int _Py_ctype_table[256]; +/* Unlike their C counterparts, the following macros are not meant to + * handle an int with any of the values [EOF, 0-UCHAR_MAX]. The argument + * must be a signed/unsigned char. */ #define Py_ISLOWER(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_LOWER) #define Py_ISUPPER(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_UPPER) #define Py_ISALPHA(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALPHA) diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index a647d9c429..ee6313b311 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -1365,7 +1365,7 @@ tok_get(register struct tok_state *tok, char **p_start, char **p_end) goto letter_quote; break; } - while (Py_ISALNUM(c) || c == '_') { + while (c != EOF && (Py_ISALNUM(c) || c == '_')) { c = tok_nextc(tok); } tok_backup(tok, c);