[Lldb-commits] [lldb] r252521 - Avoid sending bare '*' and '}' in an lldb-server packet

Tim Northover via lldb-commits lldb-commits at lists.llvm.org
Mon Nov 9 14:05:05 PST 2015


Author: tnorthover
Date: Mon Nov  9 16:05:05 2015
New Revision: 252521

URL: http://llvm.org/viewvc/llvm-project?rev=252521&view=rev
Log:
Avoid sending bare '*' and '}' in an lldb-server packet

They get treated as special RLE encoding symbols and packets get
corrupted. Most other packet types already know about this apparently,
but QEnvironment missed these two.

Should fix PR25300.

Added:
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/process_launch/print_env.cpp
Modified:
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/process_launch/TestProcessLaunch.py
    lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp

Modified: lldb/trunk/packages/Python/lldbsuite/test/functionalities/process_launch/TestProcessLaunch.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/process_launch/TestProcessLaunch.py?rev=252521&r1=252520&r2=252521&view=diff
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/process_launch/TestProcessLaunch.py (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/process_launch/TestProcessLaunch.py Mon Nov  9 16:05:05 2015
@@ -178,3 +178,24 @@ class ProcessLaunchTestCase(TestBase):
 
         if not success:
             self.fail(err_msg)
+
+    def test_environment_with_special_char (self):
+        """Test that environment variables containing '*' and '}' are communicated correctly to the lldb-server."""
+        d = {'CXX_SOURCES' : 'print_env.cpp'}
+        self.build(dictionary=d)
+        self.setTearDownCleanup(d)
+        exe = os.path.join (os.getcwd(), "a.out")
+
+        evil_var = 'INIT*MIDDLE}TAIL'
+
+        target = self.dbg.CreateTarget(exe)
+        process = target.LaunchSimple(None, ['EVIL=' + evil_var], self.get_process_working_directory())
+        self.assertEqual(process.GetState(), lldb.eStateExited, PROCESS_EXITED)
+
+        out = process.GetSTDOUT(len(evil_var))[:len(evil_var)]
+        if out != evil_var:
+            self.fail('The environment variable was mis-coded: %s\n' % repr(out))
+
+        newline = process.GetSTDOUT(1)[0]
+        if newline != '\r' and newline != '\n':
+            self.fail('Garbage at end of environment variable')

Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/process_launch/print_env.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/process_launch/print_env.cpp?rev=252521&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/process_launch/print_env.cpp (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/process_launch/print_env.cpp Mon Nov  9 16:05:05 2015
@@ -0,0 +1,11 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+int main (int argc, char **argv)
+{
+  char *evil = getenv("EVIL");
+  puts(evil);
+
+  return 0;
+}

Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp?rev=252521&r1=252520&r2=252521&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp Mon Nov  9 16:05:05 2015
@@ -1584,6 +1584,7 @@ GDBRemoteCommunicationClient::SendEnviro
                     case '$':
                     case '#':
                     case '*':
+                    case '}':
                         send_hex_encoding = true;
                         break;
                     default:




More information about the lldb-commits mailing list