Unverified Kaydet (Commit) 10654c19 authored tarafından Inada Naoki's avatar Inada Naoki Kaydeden (comit) GitHub

bpo-20844: open script file with "rb" mode (GH-12616)

üst 62f95886
......@@ -109,6 +109,10 @@ the same library that the Python runtime is using.
(:func:`sys.getfilesystemencoding`). If *closeit* is true, the file is
closed before PyRun_SimpleFileExFlags returns.
.. note::
On Windows, *fp* should be opened as binary mode (e.g. ``fopen(filename, "rb")``.
Otherwise, Python may not handle script file with LF line ending correctly.
.. c:function:: int PyRun_InteractiveOne(FILE *fp, const char *filename)
......
......@@ -409,6 +409,23 @@ class CmdLineTest(unittest.TestCase):
script_name, script_name, script_dir, '',
importlib.machinery.SourceFileLoader)
def test_issue20884(self):
# On Windows, script with encoding cookie and LF line ending
# will be failed.
with support.temp_dir() as script_dir:
script_name = os.path.join(script_dir, "issue20884.py")
with open(script_name, "w", newline='\n') as f:
f.write("#coding: iso-8859-1\n")
f.write('"""\n')
for _ in range(30):
f.write('x'*80 + '\n')
f.write('"""\n')
with support.change_cwd(path=script_dir):
rc, out, err = assert_python_ok(script_name)
self.assertEqual(b"", out)
self.assertEqual(b"", err)
@contextlib.contextmanager
def setup_test_pkg(self, *args):
with support.temp_dir() as script_dir, \
......
Fix running script with encoding cookie and LF line ending
may fail on Windows.
......@@ -283,7 +283,7 @@ static int
pymain_run_file(_PyCoreConfig *config, PyCompilerFlags *cf)
{
const wchar_t *filename = config->run_filename;
FILE *fp = _Py_wfopen(filename, L"r");
FILE *fp = _Py_wfopen(filename, L"rb");
if (fp == NULL) {
char *cfilename_buffer;
const char *cfilename;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment