diff options
author | Georg Brandl <georg@python.org> | 2008-01-21 18:35:52 +0000 |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2008-01-21 18:35:52 +0000 |
commit | 93ed5083db8cdfc74fef209b85f0c2d94b45eddb (patch) | |
tree | 24f4a2222a8f5f9fa185d76891ae0791b3c71eb6 /Parser | |
parent | d61717907792392b322ab973cd063ef82b7eca36 (diff) | |
download | cpython-93ed5083db8cdfc74fef209b85f0c2d94b45eddb.tar.gz |
Issue #1882: when compiling code from a string, encoding cookies in the
second line of code were not always recognized correctly.
(backport from rev. 60168)
Diffstat (limited to 'Parser')
-rw-r--r-- | Parser/tokenizer.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index f2c80eb63e..1533502c83 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -585,6 +585,7 @@ decode_str(const char *str, struct tok_state *tok) { PyObject* utf8 = NULL; const char *s; + char *newl[2] = {NULL, NULL}; int lineno = 0; tok->enc = NULL; tok->str = str; @@ -603,13 +604,23 @@ decode_str(const char *str, struct tok_state *tok) for (s = str;; s++) { if (*s == '\0') break; else if (*s == '\n') { + newl[lineno] = s; lineno++; if (lineno == 2) break; } } tok->enc = NULL; - if (!check_coding_spec(str, s - str, tok, buf_setreadl)) - return error_ret(tok); + /* need to check line 1 and 2 separately since check_coding_spec + assumes a single line as input */ + if (newl[0]) { + if (!check_coding_spec(str, newl[0] - str, tok, buf_setreadl)) + return error_ret(tok); + if (tok->enc == NULL && newl[1]) { + if (!check_coding_spec(newl[0]+1, newl[1] - newl[0], + tok, buf_setreadl)) + return error_ret(tok); + } + } #ifdef Py_USING_UNICODE if (tok->enc != NULL) { assert(utf8 == NULL); |