From f39db18ec34242066a545b7c035366f4f79e99fc Mon Sep 17 00:00:00 2001 From: Georg Richter Date: Wed, 11 Apr 2018 13:21:05 +0200 Subject: [PATCH] Fix for CONC-315: If no default client character set was specified, the utf8 character set will be used by default (instead of setting the client character set to server character set) --- libmariadb/mariadb_charset.c | 2 +- libmariadb/mariadb_lib.c | 4 ---- unittest/libmariadb/connection.c | 20 ++++++++++++++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/libmariadb/mariadb_charset.c b/libmariadb/mariadb_charset.c index fd89aeaf..b249bf34 100644 --- a/libmariadb/mariadb_charset.c +++ b/libmariadb/mariadb_charset.c @@ -22,7 +22,7 @@ #include #include -MARIADB_CHARSET_INFO *ma_default_charset_info = (MARIADB_CHARSET_INFO *)&mariadb_compiled_charsets[5]; +MARIADB_CHARSET_INFO *ma_default_charset_info = (MARIADB_CHARSET_INFO *)&mariadb_compiled_charsets[21]; MARIADB_CHARSET_INFO *ma_charset_bin= (MARIADB_CHARSET_INFO *)&mariadb_compiled_charsets[32]; MARIADB_CHARSET_INFO *ma_charset_latin1= (MARIADB_CHARSET_INFO *)&mariadb_compiled_charsets[5]; MARIADB_CHARSET_INFO *ma_charset_utf8_general_ci= (MARIADB_CHARSET_INFO *)&mariadb_compiled_charsets[21]; diff --git a/libmariadb/mariadb_lib.c b/libmariadb/mariadb_lib.c index 9a0b8e74..ad8a3ec4 100644 --- a/libmariadb/mariadb_lib.c +++ b/libmariadb/mariadb_lib.c @@ -1471,8 +1471,6 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user, /* Set character set */ if (mysql->options.charset_name) mysql->charset= mysql_find_charset_name(mysql->options.charset_name); - else if (mysql->server_language) - mysql->charset= mysql_find_charset_nr(mysql->server_language); else mysql->charset=ma_default_charset_info; @@ -1721,8 +1719,6 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, if (mysql->options.charset_name) mysql->charset =mysql_find_charset_name(mysql->options.charset_name); - else if (mysql->server_language) - mysql->charset=mysql_find_charset_nr(mysql->server_language); else mysql->charset=ma_default_charset_info; diff --git a/unittest/libmariadb/connection.c b/unittest/libmariadb/connection.c index 65e37e88..864c8d85 100644 --- a/unittest/libmariadb/connection.c +++ b/unittest/libmariadb/connection.c @@ -1358,7 +1358,27 @@ static int test_expired_pw(MYSQL *my) return OK; } +static int test_conc315(MYSQL *mysql) +{ + int rc; + const char *csname; + + if (!is_mariadb) + return SKIP; + + mysql_get_optionv(mysql, MYSQL_SET_CHARSET_NAME, &csname); + FAIL_UNLESS(strcmp(csname, "utf8") == 0, "Wrong default character set"); + + rc= mysql_change_user(mysql, username, password, schema); + check_mysql_rc(rc, mysql); + mysql_get_optionv(mysql, MYSQL_SET_CHARSET_NAME, &csname); + FAIL_UNLESS(strcmp(csname, "utf8") == 0, "Wrong default character set"); + return OK; +} + + struct my_tests_st my_tests[] = { + {"test_conc315", test_conc315, TEST_CONNECTION_DEFAULT, 0, NULL, NULL}, {"test_expired_pw", test_expired_pw, TEST_CONNECTION_DEFAULT, 0, NULL, NULL}, {"test_conc276", test_conc276, TEST_CONNECTION_NONE, 0, NULL, NULL}, {"test_mdev13100", test_mdev13100, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},