summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Sottile <asottile@umich.edu>2021-01-07 08:41:11 -0800
committerAnthony Sottile <asottile@umich.edu>2021-01-07 09:15:46 -0800
commit0bf8d2a88586b6a1490fd5eaa1d29e1ed16ea705 (patch)
tree17bfb71e42f3902cda825dcd64eb4c9903465951
parentff433b2e64e864e44ce0fbb9a0145fe7164db904 (diff)
downloadflake8-0bf8d2a88586b6a1490fd5eaa1d29e1ed16ea705.tar.gz
ensure crlf line endings of stdin are handled properly
-rw-r--r--src/flake8/utils.py3
-rw-r--r--tests/unit/test_utils.py10
2 files changed, 12 insertions, 1 deletions
diff --git a/src/flake8/utils.py b/src/flake8/utils.py
index 8963011..29dc554 100644
--- a/src/flake8/utils.py
+++ b/src/flake8/utils.py
@@ -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")
diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py
index c84a03b..4b89484 100644
--- a/tests/unit/test_utils.py
+++ b/tests/unit/test_utils.py
@@ -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'