changeset 44187:98c14f0108b8 stable

py3: fix EOL detection in commandserver.channeledinput This breaks TortoiseHg's email preview which sends b'\n' while readline request is issued and the loop never ends. Spotted by Matt Harbison.
author Yuya Nishihara <yuya@tcha.org>
date Mon, 24 Feb 2020 13:28:49 +0900
parents 69b091cdc506
children 1813f79017ac f5c006621f07
files mercurial/commandserver.py tests/test-commandserver.t
diffstat 2 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commandserver.py	Thu Feb 20 16:21:00 2020 -0800
+++ b/mercurial/commandserver.py	Mon Feb 24 13:28:49 2020 +0900
@@ -160,7 +160,7 @@
             buf = s
             # keep asking for more until there's either no more or
             # we got a full line
-            while s and s[-1] != b'\n':
+            while s and not s.endswith(b'\n'):
                 s = self._read(size, b'L')
                 buf += s
 
--- a/tests/test-commandserver.t	Thu Feb 20 16:21:00 2020 -0800
+++ b/tests/test-commandserver.t	Mon Feb 24 13:28:49 2020 +0900
@@ -654,6 +654,9 @@
   ...     runcommand(server, [b'debugprompt', b'--config',
   ...                         b'ui.interactive=True'],
   ...                input=stringio(b'5678\n'))
+  ...     runcommand(server, [b'debugprompt', b'--config',
+  ...                         b'ui.interactive=True'],
+  ...                input=stringio(b'\nremainder\nshould\nnot\nbe\nread\n'))
   ...     runcommand(server, [b'debugreadstdin'])
   ...     runcommand(server, [b'debugwritestdout'])
   *** runcommand debuggetpass --config ui.interactive=True
@@ -665,6 +668,8 @@
    [255]
   *** runcommand debugprompt --config ui.interactive=True
   prompt: 5678
+  *** runcommand debugprompt --config ui.interactive=True
+  prompt: y
   *** runcommand debugreadstdin
   read: ''
   *** runcommand debugwritestdout