From 974ff61c57322b6d419a3205a43e42b72671a080 Mon Sep 17 00:00:00 2001 From: Tim Northover Date: Mon, 9 Nov 2015 22:05:05 +0000 Subject: 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. llvm-svn: 252521 --- .../process_launch/TestProcessLaunch.py | 21 +++++++++++++++++++++ .../functionalities/process_launch/print_env.cpp | 11 +++++++++++ 2 files changed, 32 insertions(+) create mode 100644 lldb/packages/Python/lldbsuite/test/functionalities/process_launch/print_env.cpp (limited to 'lldb/packages/Python/lldbsuite/test/functionalities/process_launch') diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/process_launch/TestProcessLaunch.py b/lldb/packages/Python/lldbsuite/test/functionalities/process_launch/TestProcessLaunch.py index bc1a6f75b87..9346bb0ba85 100644 --- a/lldb/packages/Python/lldbsuite/test/functionalities/process_launch/TestProcessLaunch.py +++ b/lldb/packages/Python/lldbsuite/test/functionalities/process_launch/TestProcessLaunch.py @@ -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') diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/process_launch/print_env.cpp b/lldb/packages/Python/lldbsuite/test/functionalities/process_launch/print_env.cpp new file mode 100644 index 00000000000..cbb9b217591 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/functionalities/process_launch/print_env.cpp @@ -0,0 +1,11 @@ +#include +#include +#include + +int main (int argc, char **argv) +{ + char *evil = getenv("EVIL"); + puts(evil); + + return 0; +} -- cgit v1.2.3