Loading mysql-test/r/federated.result +2 −0 Original line number Diff line number Diff line Loading @@ -2069,6 +2069,8 @@ a b 1 1 DROP TABLE t1; DROP TABLE t1; CREATE TABLE t1 (a INT) ENGINE=federated CONNECTION='mysql://@:://'; DROP TABLE t1; DROP TABLE IF EXISTS federated.t1; DROP DATABASE IF EXISTS federated; DROP TABLE IF EXISTS federated.t1; Loading mysql-test/t/federated.test +12 −0 Original line number Diff line number Diff line Loading @@ -1738,4 +1738,16 @@ DROP TABLE t1; connection slave; DROP TABLE t1; # # BUG#34788 - malformed federated connection url is not handled correctly - # crashes server ! # # also tests # # BUG#35509 - Federated leaks memory when connecting to localhost/default # port # CREATE TABLE t1 (a INT) ENGINE=federated CONNECTION='mysql://@:://'; DROP TABLE t1; source include/federated_cleanup.inc; sql/ha_federated.cc +9 −3 Original line number Diff line number Diff line Loading @@ -643,13 +643,20 @@ static int parse_url(FEDERATED_SHARE *share, TABLE *table, if ((strchr(share->table_name, '/'))) goto error; /* If hostname is omitted, we set it to NULL. According to mysql_real_connect() manual: The value of host may be either a hostname or an IP address. If host is NULL or the string "localhost", a connection to the local host is assumed. */ if (share->hostname[0] == '\0') share->hostname= NULL; if (!share->port) { if (strcmp(share->hostname, my_localhost) == 0) share->socket= my_strdup(MYSQL_UNIX_ADDR, MYF(0)); if (!share->hostname || strcmp(share->hostname, my_localhost) == 0) share->socket= (char*) MYSQL_UNIX_ADDR; else share->port= MYSQL_PORT; } Loading Loading @@ -1335,7 +1342,6 @@ static int free_share(FEDERATED_SHARE *share) { hash_delete(&federated_open_tables, (byte*) share); my_free((gptr) share->scheme, MYF(MY_ALLOW_ZERO_PTR)); my_free((gptr) share->socket, MYF(MY_ALLOW_ZERO_PTR)); thr_lock_delete(&share->lock); VOID(pthread_mutex_destroy(&share->mutex)); my_free((gptr) share, MYF(0)); Loading Loading
mysql-test/r/federated.result +2 −0 Original line number Diff line number Diff line Loading @@ -2069,6 +2069,8 @@ a b 1 1 DROP TABLE t1; DROP TABLE t1; CREATE TABLE t1 (a INT) ENGINE=federated CONNECTION='mysql://@:://'; DROP TABLE t1; DROP TABLE IF EXISTS federated.t1; DROP DATABASE IF EXISTS federated; DROP TABLE IF EXISTS federated.t1; Loading
mysql-test/t/federated.test +12 −0 Original line number Diff line number Diff line Loading @@ -1738,4 +1738,16 @@ DROP TABLE t1; connection slave; DROP TABLE t1; # # BUG#34788 - malformed federated connection url is not handled correctly - # crashes server ! # # also tests # # BUG#35509 - Federated leaks memory when connecting to localhost/default # port # CREATE TABLE t1 (a INT) ENGINE=federated CONNECTION='mysql://@:://'; DROP TABLE t1; source include/federated_cleanup.inc;
sql/ha_federated.cc +9 −3 Original line number Diff line number Diff line Loading @@ -643,13 +643,20 @@ static int parse_url(FEDERATED_SHARE *share, TABLE *table, if ((strchr(share->table_name, '/'))) goto error; /* If hostname is omitted, we set it to NULL. According to mysql_real_connect() manual: The value of host may be either a hostname or an IP address. If host is NULL or the string "localhost", a connection to the local host is assumed. */ if (share->hostname[0] == '\0') share->hostname= NULL; if (!share->port) { if (strcmp(share->hostname, my_localhost) == 0) share->socket= my_strdup(MYSQL_UNIX_ADDR, MYF(0)); if (!share->hostname || strcmp(share->hostname, my_localhost) == 0) share->socket= (char*) MYSQL_UNIX_ADDR; else share->port= MYSQL_PORT; } Loading Loading @@ -1335,7 +1342,6 @@ static int free_share(FEDERATED_SHARE *share) { hash_delete(&federated_open_tables, (byte*) share); my_free((gptr) share->scheme, MYF(MY_ALLOW_ZERO_PTR)); my_free((gptr) share->socket, MYF(MY_ALLOW_ZERO_PTR)); thr_lock_delete(&share->lock); VOID(pthread_mutex_destroy(&share->mutex)); my_free((gptr) share, MYF(0)); Loading