[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