diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-05-02 18:31:19 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-05-02 18:31:19 +0000 | 
| commit | 773dd0e6e632d48d7123a321ba86f50847b9afc0 (patch) | |
| tree | c6bd992bb1963df11f8de346d12a5a70c2e4deb2 /tools/debugserver/source/debugserver.cpp | |
| parent | 5060b64b7d79491d507a75201be161fd0c38fcbb (diff) | |
Notes
Diffstat (limited to 'tools/debugserver/source/debugserver.cpp')
| -rw-r--r-- | tools/debugserver/source/debugserver.cpp | 16 | 
1 files changed, 12 insertions, 4 deletions
| diff --git a/tools/debugserver/source/debugserver.cpp b/tools/debugserver/source/debugserver.cpp index 0cb72f4ece45..bc1954de334a 100644 --- a/tools/debugserver/source/debugserver.cpp +++ b/tools/debugserver/source/debugserver.cpp @@ -1345,10 +1345,18 @@ int main(int argc, char *argv[]) {        show_usage_and_exit(1);      }      // accept 'localhost:' prefix on port number - -    int items_scanned = ::sscanf(argv[0], "%[^:]:%i", str, &port); -    if (items_scanned == 2) { -      host = str; +    std::string host_specifier = argv[0]; +    auto colon_location = host_specifier.rfind(':'); +    if (colon_location != std::string::npos) { +      host = host_specifier.substr(0, colon_location); +      std::string port_str = +          host_specifier.substr(colon_location + 1, std::string::npos); +      char *end_ptr; +      port = strtoul(port_str.c_str(), &end_ptr, 0); +      if (end_ptr < port_str.c_str() + port_str.size()) +        show_usage_and_exit(2); +      if (host.front() == '[' && host.back() == ']') +        host = host.substr(1, host.size() - 2);        DNBLogDebug("host = '%s'  port = %i", host.c_str(), port);      } else {        // No hostname means "localhost" | 
