move repository from m6w6 to awesomized
[m6w6/libmemcached] / src / libmemcached / parse.cc
index 12431222e3dfea0c72215484d1ebb28af13d7815..5fe34ba8311b8ba04554d1a480f8920ad95fcb39 100644 (file)
@@ -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   <mike@php.net>                |
+    | 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;