forked from OSchip/llvm-project
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
This commit is contained in:
parent
5b0ae794b6
commit
974ff61c57
|
@ -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')
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -1584,6 +1584,7 @@ GDBRemoteCommunicationClient::SendEnvironmentPacket (char const *name_equal_valu
|
|||
case '$':
|
||||
case '#':
|
||||
case '*':
|
||||
case '}':
|
||||
send_hex_encoding = true;
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Reference in New Issue