An interpreted, interactive, object-oriented programming language
CentOS Sources
2017-08-01 71084d584ff953f5463757ec6536406320560b4d
commit | author | age
f63228 1
CS 2 # HG changeset patch
3 # User Victor Stinner <victor.stinner@gmail.com>
4 # Date 1406197344 -7200
5 # Node ID 0177d8a4e82a613de0c64e747656c1d0b63e49b3
6 # Parent  e70ab72286b470b7209b91d3aa8a21953aafb78f
7 Issue #19884: readline: Disable the meta modifier key if stdout is not a
8 terminal to not write the ANSI sequence "\033[1034h" into stdout. This sequence
9 is used on some terminal (ex: TERM=xterm-256color") to enable support of 8 bit
10 characters.
11
12 diff --git a/Lib/test/test_readline.py b/Lib/test/test_readline.py
13 --- a/Lib/test/test_readline.py
14 +++ b/Lib/test/test_readline.py
15 @@ -1,17 +1,19 @@
16  """
17  Very minimal unittests for parts of the readline module.
18 -
19 -These tests were added to check that the libedit emulation on OSX and
20 -the "real" readline have the same interface for history manipulation. That's
21 -why the tests cover only a small subset of the interface.
22  """
23 +import os
24  import unittest
25  from test.test_support import run_unittest, import_module
26 +from test.script_helper import assert_python_ok
27  
28  # Skip tests if there is no readline module
29  readline = import_module('readline')
30  
31  class TestHistoryManipulation (unittest.TestCase):
32 +    """These tests were added to check that the libedit emulation on OSX and
33 +    the "real" readline have the same interface for history manipulation.
34 +    That's why the tests cover only a small subset of the interface.
35 +    """
36  
37      @unittest.skipIf(not hasattr(readline, 'clear_history'),
38                       "The history update test cannot be run because the "
39 @@ -40,8 +42,18 @@ class TestHistoryManipulation (unittest.
40          self.assertEqual(readline.get_current_history_length(), 1)
41  
42  
43 +class TestReadline(unittest.TestCase):
44 +    def test_init(self):
45 +        # Issue #19884: Ensure that the ANSI sequence "\033[1034h" is not
46 +        # written into stdout when the readline module is imported and stdout
47 +        # is redirected to a pipe.
48 +        rc, stdout, stderr = assert_python_ok('-c', 'import readline',
49 +                                              TERM='xterm-256color')
50 +        self.assertEqual(stdout, b'')
51 +
52 +
53  def test_main():
54 -    run_unittest(TestHistoryManipulation)
55 +    run_unittest(TestHistoryManipulation, TestReadline)
56  
57  if __name__ == "__main__":
58      test_main()
59 diff --git a/Modules/readline.c b/Modules/readline.c
60 --- a/Modules/readline.c
61 +++ b/Modules/readline.c
62 @@ -887,7 +887,7 @@ setup_readline(void)
63  #endif
64  
65  #ifdef __APPLE__
66 -    /* the libedit readline emulation resets key bindings etc 
67 +    /* the libedit readline emulation resets key bindings etc
68       * when calling rl_initialize.  So call it upfront
69       */
70      if (using_libedit_emulation)
71 @@ -932,6 +932,17 @@ setup_readline(void)
72  
73      begidx = PyInt_FromLong(0L);
74      endidx = PyInt_FromLong(0L);
75 +
76 +    if (!isatty(STDOUT_FILENO)) {
77 +        /* Issue #19884: stdout is no a terminal. Disable meta modifier
78 +           keys to not write the ANSI sequence "\033[1034h" into stdout. On
79 +           terminals supporting 8 bit characters like TERM=xterm-256color
80 +           (which is now the default Fedora since Fedora 18), the meta key is
81 +           used to enable support of 8 bit characters (ANSI sequence
82 +           "\033[1034h"). */
83 +        rl_variable_bind ("enable-meta-key", "off");
84 +    }
85 +
86      /* Initialize (allows .inputrc to override)
87       *
88       * XXX: A bug in the readline-2.2 library causes a memory leak
89 @@ -943,7 +954,7 @@ setup_readline(void)
90      else
91  #endif /* __APPLE__ */
92          rl_initialize();
93 -    
94 +
95      RESTORE_LOCALE(saved_locale)
96  }
97  
98
99
100 # HG changeset patch
101 # User Victor Stinner <victor.stinner@gmail.com>
102 # Date 1406232681 -7200
103 # Node ID f0ab6f9f06036dfacff09f22f86464840b50eb0a
104 # Parent  d422062d7d366386acdb81851b0f2ec3a6f6750c
105 Issue #19884, readline: calling rl_variable_bind ("enable-meta-key", "off")
106 does crash on Mac OS X which uses libedit instead of readline.
107
108 diff --git a/Modules/readline.c b/Modules/readline.c
109 --- a/Modules/readline.c
110 +++ b/Modules/readline.c
111 @@ -933,15 +933,19 @@ setup_readline(void)
112      begidx = PyInt_FromLong(0L);
113      endidx = PyInt_FromLong(0L);
114  
115 +#ifndef __APPLE__
116      if (!isatty(STDOUT_FILENO)) {
117          /* Issue #19884: stdout is no a terminal. Disable meta modifier
118             keys to not write the ANSI sequence "\033[1034h" into stdout. On
119             terminals supporting 8 bit characters like TERM=xterm-256color
120             (which is now the default Fedora since Fedora 18), the meta key is
121             used to enable support of 8 bit characters (ANSI sequence
122 -           "\033[1034h"). */
123 +           "\033[1034h").
124 +
125 +           With libedit, this call makes readline() crash. */
126          rl_variable_bind ("enable-meta-key", "off");
127      }
128 +#endif
129  
130      /* Initialize (allows .inputrc to override)
131       *
132
133
134 # HG changeset patch
135 # User Antoine Pitrou <solipsis@pitrou.net>
136 # Date 1415109130 -3600
137 # Node ID eba6e68e818c694e499dfc4b22dde095d2557ab1
138 # Parent  e54d0b197c8245bd29ea09f421e2f1da47370f41
139 Issue #22773: fix failing test with old readline versions due to issue #19884.
140
141 diff --git a/Lib/test/test_readline.py b/Lib/test/test_readline.py
142 --- a/Lib/test/test_readline.py
143 +++ b/Lib/test/test_readline.py
144 @@ -43,6 +43,10 @@ class TestHistoryManipulation (unittest.
145  
146  
147  class TestReadline(unittest.TestCase):
148 +
149 +    @unittest.skipIf(readline._READLINE_VERSION < 0x0600
150 +                     and "libedit" not in readline.__doc__,
151 +                     "not supported in this library version")
152      def test_init(self):
153          # Issue #19884: Ensure that the ANSI sequence "\033[1034h" is not
154          # written into stdout when the readline module is imported and stdout
155 diff --git a/Modules/readline.c b/Modules/readline.c
156 --- a/Modules/readline.c
157 +++ b/Modules/readline.c
158 @@ -1184,4 +1184,7 @@ initreadline(void)
159  
160      PyOS_ReadlineFunctionPointer = call_readline;
161      setup_readline();
162 +
163 +    PyModule_AddIntConstant(m, "_READLINE_VERSION", RL_READLINE_VERSION);
164 +    PyModule_AddIntConstant(m, "_READLINE_RUNTIME_VERSION", rl_readline_version);
165  }
166