diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2014-01-09 16:36:09 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2014-01-09 16:36:09 (GMT) |
commit | 768c16ce0273a74fa846cc388753280b17b02cfc (patch) | |
tree | d2fc7f94a08fb20f882e3e0b299a59fea1251aa8 /Tools | |
parent | 21e7d4cd5eb5a1ee153baf4c7915db80e6ca59e1 (diff) | |
download | cpython-768c16ce0273a74fa846cc388753280b17b02cfc.zip cpython-768c16ce0273a74fa846cc388753280b17b02cfc.tar.gz cpython-768c16ce0273a74fa846cc388753280b17b02cfc.tar.bz2 |
Issue #18960: Fix bugs with Python source code encoding in the second line.
* The first line of Python script could be executed twice when the source
encoding (not equal to 'utf-8') was specified on the second line.
* Now the source encoding declaration on the second line isn't effective if
the first line contains anything except a comment.
* As a consequence, 'python -x' works now again with files with the source
encoding declarations specified on the second file, and can be used again
to make Python batch files on Windows.
* The tokenize module now ignore the source encoding declaration on the second
line if the first line contains anything except a comment.
* IDLE now ignores the source encoding declaration on the second line if the
first line contains anything except a comment.
* 2to3 and the findnocoding.py script now ignore the source encoding
declaration on the second line if the first line contains anything except
a comment.
Diffstat (limited to 'Tools')
-rwxr-xr-x | Tools/scripts/findnocoding.py | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/Tools/scripts/findnocoding.py b/Tools/scripts/findnocoding.py index c0997d6..5f3795e 100755 --- a/Tools/scripts/findnocoding.py +++ b/Tools/scripts/findnocoding.py @@ -33,6 +33,7 @@ except ImportError: decl_re = re.compile(rb'^[ \t\f]*#.*coding[:=][ \t]*([-\w.]+)') +blank_re = re.compile(rb'^[ \t\f]*(?:[#\r\n]|$)') def get_declaration(line): match = decl_re.match(line) @@ -58,7 +59,8 @@ def needs_declaration(fullpath): line1 = infile.readline() line2 = infile.readline() - if get_declaration(line1) or get_declaration(line2): + if (get_declaration(line1) or + blank_re.match(line1) and get_declaration(line2)): # the file does have an encoding declaration, so trust it return False |