Blame SOURCES/00198-fix-readline-erroneous-output.patch

ae2451
ae2451
# HG changeset patch
ae2451
# User Victor Stinner <victor.stinner@gmail.com>
ae2451
# Date 1406197344 -7200
ae2451
# Node ID 0177d8a4e82a613de0c64e747656c1d0b63e49b3
ae2451
# Parent  e70ab72286b470b7209b91d3aa8a21953aafb78f
ae2451
Issue #19884: readline: Disable the meta modifier key if stdout is not a
ae2451
terminal to not write the ANSI sequence "\033[1034h" into stdout. This sequence
ae2451
is used on some terminal (ex: TERM=xterm-256color") to enable support of 8 bit
ae2451
characters.
ae2451
ae2451
diff --git a/Lib/test/test_readline.py b/Lib/test/test_readline.py
ae2451
--- a/Lib/test/test_readline.py
ae2451
+++ b/Lib/test/test_readline.py
ae2451
@@ -1,17 +1,19 @@
ae2451
 """
ae2451
 Very minimal unittests for parts of the readline module.
ae2451
-
ae2451
-These tests were added to check that the libedit emulation on OSX and
ae2451
-the "real" readline have the same interface for history manipulation. That's
ae2451
-why the tests cover only a small subset of the interface.
ae2451
 """
ae2451
+import os
ae2451
 import unittest
ae2451
 from test.test_support import run_unittest, import_module
ae2451
+from test.script_helper import assert_python_ok
ae2451
 
ae2451
 # Skip tests if there is no readline module
ae2451
 readline = import_module('readline')
ae2451
 
ae2451
 class TestHistoryManipulation (unittest.TestCase):
ae2451
+    """These tests were added to check that the libedit emulation on OSX and
ae2451
+    the "real" readline have the same interface for history manipulation.
ae2451
+    That's why the tests cover only a small subset of the interface.
ae2451
+    """
ae2451
 
ae2451
     @unittest.skipIf(not hasattr(readline, 'clear_history'),
ae2451
                      "The history update test cannot be run because the "
ae2451
@@ -40,8 +42,18 @@ class TestHistoryManipulation (unittest.
ae2451
         self.assertEqual(readline.get_current_history_length(), 1)
ae2451
 
ae2451
 
ae2451
+class TestReadline(unittest.TestCase):
ae2451
+    def test_init(self):
ae2451
+        # Issue #19884: Ensure that the ANSI sequence "\033[1034h" is not
ae2451
+        # written into stdout when the readline module is imported and stdout
ae2451
+        # is redirected to a pipe.
ae2451
+        rc, stdout, stderr = assert_python_ok('-c', 'import readline',
ae2451
+                                              TERM='xterm-256color')
ae2451
+        self.assertEqual(stdout, b'')
ae2451
+
ae2451
+
ae2451
 def test_main():
ae2451
-    run_unittest(TestHistoryManipulation)
ae2451
+    run_unittest(TestHistoryManipulation, TestReadline)
ae2451
 
ae2451
 if __name__ == "__main__":
ae2451
     test_main()
ae2451
diff --git a/Modules/readline.c b/Modules/readline.c
ae2451
--- a/Modules/readline.c
ae2451
+++ b/Modules/readline.c
ae2451
@@ -887,7 +887,7 @@ setup_readline(void)
ae2451
 #endif
ae2451
 
ae2451
 #ifdef __APPLE__
ae2451
-    /* the libedit readline emulation resets key bindings etc 
ae2451
+    /* the libedit readline emulation resets key bindings etc
ae2451
      * when calling rl_initialize.  So call it upfront
ae2451
      */
ae2451
     if (using_libedit_emulation)
ae2451
@@ -932,6 +932,17 @@ setup_readline(void)
ae2451
 
ae2451
     begidx = PyInt_FromLong(0L);
ae2451
     endidx = PyInt_FromLong(0L);
ae2451
+
ae2451
+    if (!isatty(STDOUT_FILENO)) {
ae2451
+        /* Issue #19884: stdout is no a terminal. Disable meta modifier
ae2451
+           keys to not write the ANSI sequence "\033[1034h" into stdout. On
ae2451
+           terminals supporting 8 bit characters like TERM=xterm-256color
ae2451
+           (which is now the default Fedora since Fedora 18), the meta key is
ae2451
+           used to enable support of 8 bit characters (ANSI sequence
ae2451
+           "\033[1034h"). */
ae2451
+        rl_variable_bind ("enable-meta-key", "off");
ae2451
+    }
ae2451
+
ae2451
     /* Initialize (allows .inputrc to override)
ae2451
      *
ae2451
      * XXX: A bug in the readline-2.2 library causes a memory leak
ae2451
@@ -943,7 +954,7 @@ setup_readline(void)
ae2451
     else
ae2451
 #endif /* __APPLE__ */
ae2451
         rl_initialize();
ae2451
-    
ae2451
+
ae2451
     RESTORE_LOCALE(saved_locale)
ae2451
 }
ae2451
 
ae2451
ae2451
ae2451
# HG changeset patch
ae2451
# User Victor Stinner <victor.stinner@gmail.com>
ae2451
# Date 1406232681 -7200
ae2451
# Node ID f0ab6f9f06036dfacff09f22f86464840b50eb0a
ae2451
# Parent  d422062d7d366386acdb81851b0f2ec3a6f6750c
ae2451
Issue #19884, readline: calling rl_variable_bind ("enable-meta-key", "off")
ae2451
does crash on Mac OS X which uses libedit instead of readline.
ae2451
ae2451
diff --git a/Modules/readline.c b/Modules/readline.c
ae2451
--- a/Modules/readline.c
ae2451
+++ b/Modules/readline.c
ae2451
@@ -933,15 +933,19 @@ setup_readline(void)
ae2451
     begidx = PyInt_FromLong(0L);
ae2451
     endidx = PyInt_FromLong(0L);
ae2451
 
ae2451
+#ifndef __APPLE__
ae2451
     if (!isatty(STDOUT_FILENO)) {
ae2451
         /* Issue #19884: stdout is no a terminal. Disable meta modifier
ae2451
            keys to not write the ANSI sequence "\033[1034h" into stdout. On
ae2451
            terminals supporting 8 bit characters like TERM=xterm-256color
ae2451
            (which is now the default Fedora since Fedora 18), the meta key is
ae2451
            used to enable support of 8 bit characters (ANSI sequence
ae2451
-           "\033[1034h"). */
ae2451
+           "\033[1034h").
ae2451
+
ae2451
+           With libedit, this call makes readline() crash. */
ae2451
         rl_variable_bind ("enable-meta-key", "off");
ae2451
     }
ae2451
+#endif
ae2451
 
ae2451
     /* Initialize (allows .inputrc to override)
ae2451
      *
ae2451
ae2451
ae2451
# HG changeset patch
ae2451
# User Antoine Pitrou <solipsis@pitrou.net>
ae2451
# Date 1415109130 -3600
ae2451
# Node ID eba6e68e818c694e499dfc4b22dde095d2557ab1
ae2451
# Parent  e54d0b197c8245bd29ea09f421e2f1da47370f41
ae2451
Issue #22773: fix failing test with old readline versions due to issue #19884.
ae2451
ae2451
diff --git a/Lib/test/test_readline.py b/Lib/test/test_readline.py
ae2451
--- a/Lib/test/test_readline.py
ae2451
+++ b/Lib/test/test_readline.py
ae2451
@@ -43,6 +43,10 @@ class TestHistoryManipulation (unittest.
ae2451
 
ae2451
 
ae2451
 class TestReadline(unittest.TestCase):
ae2451
+
ae2451
+    @unittest.skipIf(readline._READLINE_VERSION < 0x0600
ae2451
+                     and "libedit" not in readline.__doc__,
ae2451
+                     "not supported in this library version")
ae2451
     def test_init(self):
ae2451
         # Issue #19884: Ensure that the ANSI sequence "\033[1034h" is not
ae2451
         # written into stdout when the readline module is imported and stdout
ae2451
diff --git a/Modules/readline.c b/Modules/readline.c
ae2451
--- a/Modules/readline.c
ae2451
+++ b/Modules/readline.c
ae2451
@@ -1184,4 +1184,7 @@ initreadline(void)
ae2451
 
ae2451
     PyOS_ReadlineFunctionPointer = call_readline;
ae2451
     setup_readline();
ae2451
+
ae2451
+    PyModule_AddIntConstant(m, "_READLINE_VERSION", RL_READLINE_VERSION);
ae2451
+    PyModule_AddIntConstant(m, "_READLINE_RUNTIME_VERSION", rl_readline_version);
ae2451
 }
ae2451