Skip to content

Commit

Permalink
Quote error string from qLaunchSuccess
Browse files Browse the repository at this point in the history
If the error message from qLaunchSucess included a gdb RSP
metacharacter, it could crash lldb.  Apply the binary
escaping to the string before sending it to lldb; lldb
promiscuously applies the binary escaping protocol on
packets it receives.

Also fix a small bug in cstring_to_asciihex_string where
a high bit character (eg utf-8 chars) would not be
quoted correctly due to signed char fun.

Differential Revision: https://reviews.llvm.org/D79614

rdar://problem/62873581
(cherry picked from commit 2b8b783)
  • Loading branch information
jasonmolenda committed May 12, 2020
1 parent f3eb161 commit b6311ca
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions lldb/tools/debugserver/source/RNBRemote.cpp
Expand Up @@ -1643,7 +1643,9 @@ rnb_err_t RNBRemote::HandlePacket_qLaunchSuccess(const char *p) {
return SendPacket("OK");
std::ostringstream ret_str;
std::string status_str;
ret_str << "E" << m_ctx.LaunchStatusAsString(status_str);
std::string error_quoted = binary_encode_string
(m_ctx.LaunchStatusAsString(status_str));
ret_str << "E" << error_quoted;

return SendPacket(ret_str.str());
}
Expand Down Expand Up @@ -2677,8 +2679,9 @@ std::string cstring_to_asciihex_string(const char *str) {
std::string hex_str;
hex_str.reserve (strlen (str) * 2);
while (str && *str) {
uint8_t c = *str++;
char hexbuf[5];
snprintf (hexbuf, sizeof(hexbuf), "%02x", *str++);
snprintf (hexbuf, sizeof(hexbuf), "%02x", c);
hex_str += hexbuf;
}
return hex_str;
Expand Down

0 comments on commit b6311ca

Please sign in to comment.