Merge branch 'crlf_stdin' into 'master'

ensure crlf line endings of stdin are handled properly

See merge request pycqa/flake8!461
This commit is contained in:
Ian Stapleton Cordasco 2021-01-07 23:32:08 +00:00
commit 6de8252c03
2 changed files with 12 additions and 1 deletions

View file

@ -195,7 +195,8 @@ def _stdin_get_value_py3(): # type: () -> str
fd = io.BytesIO(stdin_value)
try:
coding, _ = tokenize.detect_encoding(fd.readline)
return stdin_value.decode(coding)
fd.seek(0)
return io.TextIOWrapper(fd, coding).read()
except (LookupError, SyntaxError, UnicodeError):
return stdin_value.decode("utf-8")

View file

@ -1,6 +1,8 @@
"""Tests for flake8's utils module."""
import io
import logging
import os
import sys
import mock
import pytest
@ -304,3 +306,11 @@ def test_matches_filename_for_excluding_dotfiles():
logger = logging.Logger(__name__)
assert not utils.matches_filename('.', ('.*',), '', logger)
assert not utils.matches_filename('..', ('.*',), '', logger)
@pytest.mark.xfail(sys.version_info < (3,), reason='py3+ only behaviour')
def test_stdin_get_value_crlf():
"""Ensure that stdin is normalized from crlf to lf."""
stdin = io.TextIOWrapper(io.BytesIO(b'1\r\n2\r\n'), 'UTF-8')
with mock.patch.object(sys, 'stdin', stdin):
assert utils.stdin_get_value.__wrapped__() == '1\n2\n'