ensure crlf line endings of stdin are handled properly

This commit is contained in:
Anthony Sottile 2021-01-07 08:41:11 -08:00
parent ff433b2e64
commit 0bf8d2a885
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'