X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=src%2Flibmemcached%2Fparse.cc;h=5fe34ba8311b8ba04554d1a480f8920ad95fcb39;hb=e4dc06e9f89a6aa678e2973898ae75faa80bc0c2;hp=12431222e3dfea0c72215484d1ebb28af13d7815;hpb=2f289c64f625962d945ec3bee80f36bc5c61ee35;p=m6w6%2Flibmemcached diff --git a/src/libmemcached/parse.cc b/src/libmemcached/parse.cc index 12431222..5fe34ba8 100644 --- a/src/libmemcached/parse.cc +++ b/src/libmemcached/parse.cc @@ -9,7 +9,7 @@ | the terms online at: https://opensource.org/licenses/BSD-3-Clause | +--------------------------------------------------------------------+ | Copyright (c) 2006-2014 Brian Aker https://datadifferential.com/ | - | Copyright (c) 2020 Michael Wallner | + | Copyright (c) 2020-2021 Michael Wallner https://awesome.co/ | +--------------------------------------------------------------------+ */ @@ -30,7 +30,7 @@ memcached_server_list_st memcached_servers_parse(const char *server_strings) { begin_ptr != end_ptr; string = (char *) strchr(begin_ptr, ',')) { char buffer[HUGE_STRING_LEN]; - char *ptr, *ptr2; + char *ptr, *ptr2 = NULL; uint32_t weight = 0; if (string) { @@ -44,8 +44,17 @@ memcached_server_list_st memcached_servers_parse(const char *server_strings) { begin_ptr = end_ptr; } - ptr = strchr(buffer, ':'); - + ptr = strchr(buffer, '['); + if (ptr) { + ptr2 = strchr(ptr+1, ']'); + } + if (ptr && ptr2) { + // [IPv6]:port + ptr = strchr(ptr2+1, ':'); + } else { + // IPv4:port or name:port + ptr = strchr(buffer, ':'); + } in_port_t port = 0; if (ptr) { ptr[0] = 0;