Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package mariadb-connector-c for
openSUSE:Factory checked in at 2023-03-09 17:44:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mariadb-connector-c (Old)
and /work/SRC/openSUSE:Factory/.mariadb-connector-c.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mariadb-connector-c"
Thu Mar 9 17:44:39 2023 rev:41 rq:1070070 version:3.3.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/mariadb-connector-c/mariadb-connector-c.changes
2022-12-07 17:35:17.336645554 +0100
+++
/work/SRC/openSUSE:Factory/.mariadb-connector-c.new.31432/mariadb-connector-c.changes
2023-03-09 17:44:41.314572126 +0100
@@ -1,0 +2,6 @@
+Tue Mar 7 20:49:44 UTC 2023 - Dirk Müller <[email protected]>
+
+- update to 3.3.4:
+ https://mariadb.com/kb/en/mariadb-connector-c-3-3-4-release-notes/
+
+-------------------------------------------------------------------
Old:
----
mariadb-connector-c-3.3.3-src.tar.gz
mariadb-connector-c-3.3.3-src.tar.gz.asc
New:
----
mariadb-connector-c-3.3.4-src.tar.gz
mariadb-connector-c-3.3.4-src.tar.gz.asc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ mariadb-connector-c.spec ++++++
--- /var/tmp/diff_new_pack.sETawd/_old 2023-03-09 17:44:41.870575086 +0100
+++ /var/tmp/diff_new_pack.sETawd/_new 2023-03-09 17:44:41.874575106 +0100
@@ -1,7 +1,7 @@
#
# spec file for package mariadb-connector-c
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -25,7 +25,7 @@
%endif
%bcond_with sqlite3
Name: mariadb-connector-c
-Version: 3.3.3
+Version: 3.3.4
Release: 0
Summary: MariaDB connector in C
License: LGPL-2.1-or-later
++++++ mariadb-connector-c-3.3.3-src.tar.gz ->
mariadb-connector-c-3.3.4-src.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mariadb-connector-c-3.3.3-src/CMakeLists.txt
new/mariadb-connector-c-3.3.4-src/CMakeLists.txt
--- old/mariadb-connector-c-3.3.3-src/CMakeLists.txt 2022-11-07
09:09:29.000000000 +0100
+++ new/mariadb-connector-c-3.3.4-src/CMakeLists.txt 2023-01-16
12:12:46.000000000 +0100
@@ -36,7 +36,7 @@
SET(CPACK_PACKAGE_VERSION_MAJOR 3)
SET(CPACK_PACKAGE_VERSION_MINOR 3)
-SET(CPACK_PACKAGE_VERSION_PATCH 3)
+SET(CPACK_PACKAGE_VERSION_PATCH 4)
SET(CPACK_PACKAGE_VERSION
"${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
MATH(EXPR MARIADB_PACKAGE_VERSION_ID "${CPACK_PACKAGE_VERSION_MAJOR} * 10000 +
${CPACK_PACKAGE_VERSION_MINOR} * 100 +
@@ -172,7 +172,7 @@
ELSE()
SET(MARIADB_CLIENT_VERSION_MAJOR "10")
SET(MARIADB_CLIENT_VERSION_MINOR "8")
- SET(MARIADB_CLIENT_VERSION_PATCH "4")
+ SET(MARIADB_CLIENT_VERSION_PATCH "7")
SET(MARIADB_CLIENT_VERSION_EXTRA "")
ENDIF()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mariadb-connector-c-3.3.3-src/include/errmsg.h
new/mariadb-connector-c-3.3.4-src/include/errmsg.h
--- old/mariadb-connector-c-3.3.3-src/include/errmsg.h 2022-11-07
09:09:29.000000000 +0100
+++ new/mariadb-connector-c-3.3.4-src/include/errmsg.h 2023-01-16
12:12:46.000000000 +0100
@@ -31,16 +31,14 @@
}
#endif
-
-
#define CR_MIN_ERROR 2000 /* For easier client code */
#define CR_MAX_ERROR 2999
#define CER_MIN_ERROR 5000
#define CER_MAX_ERROR 5999
-#define CER(X) mariadb_client_errors[(X)-CER_MIN_ERROR]
-#define ER(X) client_errors[(X)-CR_MIN_ERROR]
#define CLIENT_ERRMAP 2 /* Errormap used by ma_error() */
+#define ER_UNKNOWN_ERROR_CODE "Unknown or undefined error code (%d)"
+
#define CR_UNKNOWN_ERROR 2000
#define CR_SOCKET_CREATE_ERROR 2001
#define CR_CONNECTION_ERROR 2002
@@ -108,9 +106,19 @@
#define CR_ERR_NET_READ 5013
#define CR_ERR_NET_WRITE 5014
#define CR_ERR_NET_UNCOMPRESS 5015
+#define CR_ERR_STMT_PARAM_CALLBACK 5016
/* Always last, if you add new error codes please update the
value for CR_MARIADB_LAST_ERROR */
-#define CR_MARIADB_LAST_ERROR CR_ERR_NET_UNCOMPRESS
+#define CR_MARIADB_LAST_ERROR CR_ERR_STMT_PARAM_CALLBACK
#endif
+
+#define IS_MYSQL_ERROR(code) ((code) > CR_MIN_ERROR && (code) <
CR_MYSQL_LAST_ERROR)
+#define IS_MARIADB_ERROR(code) ((code) > CER_MIN_ERROR && (code) <
CR_MARIADB_LAST_ERROR)
+
+#define ER(code) IS_MYSQL_ERROR((code)) ? client_errors[(code) - CR_MIN_ERROR]
: \
+ IS_MARIADB_ERROR((code)) ? mariadb_client_errors[(code) -
CER_MIN_ERROR] : \
+ "Unknown or undefined error code"
+#define CER(code) ER((code))
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mariadb-connector-c-3.3.3-src/include/mariadb_stmt.h
new/mariadb-connector-c-3.3.4-src/include/mariadb_stmt.h
--- old/mariadb-connector-c-3.3.3-src/include/mariadb_stmt.h 2022-11-07
09:09:29.000000000 +0100
+++ new/mariadb-connector-c-3.3.4-src/include/mariadb_stmt.h 2023-01-16
12:12:46.000000000 +0100
@@ -34,14 +34,8 @@
((stmt)->mysql->extension->mariadb_server_capabilities & \
(MARIADB_CLIENT_STMT_BULK_OPERATIONS >> 32))))
-#define SET_CLIENT_STMT_ERROR(a, b, c, d) \
-do { \
- (a)->last_errno= (b);\
- strncpy((a)->sqlstate, (c), SQLSTATE_LENGTH);\
- (a)->sqlstate[SQLSTATE_LENGTH]= 0;\
- strncpy((a)->last_error, (d) ? (d) : ER((b)), MYSQL_ERRMSG_SIZE);\
- (a)->last_error[MYSQL_ERRMSG_SIZE - 1]= 0;\
-} while (0)
+#define SET_CLIENT_STMT_ERROR(a, b, c, d, ...) \
+ stmt_set_error((a),(b),(c),(d), ##__VA_ARGS__)
#define CLEAR_CLIENT_STMT_ERROR(a) \
do { \
@@ -223,6 +217,11 @@
unsigned long net_field_length(unsigned char **packet);
int ma_simple_command(MYSQL *mysql,enum enum_server_command command, const
char *arg,
size_t length, my_bool skipp_check, void *opt_arg);
+void stmt_set_error(MYSQL_STMT *stmt,
+ unsigned int error_nr,
+ const char *sqlstate,
+ const char *format,
+ ...);
/*
* function prototypes
*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mariadb-connector-c-3.3.3-src/libmariadb/ma_errmsg.c
new/mariadb-connector-c-3.3.4-src/libmariadb/ma_errmsg.c
--- old/mariadb-connector-c-3.3.3-src/libmariadb/ma_errmsg.c 2022-11-07
09:09:29.000000000 +0100
+++ new/mariadb-connector-c-3.3.4-src/libmariadb/ma_errmsg.c 2023-01-16
12:12:46.000000000 +0100
@@ -85,10 +85,10 @@
/* 2055 */ "Lost connection to server at '%s', system error: %d",
/* 2056 */ "Server closed statement due to a prior %s function call",
/* 2057 */ "The number of parameters in bound buffers differs from number of
columns in resultset",
-/* 2059 */ "Can't connect twice. Already connected",
-/* 2058 */ "Plugin %s could not be loaded: %s",
-/* 2059 */ "An attribute with same name already exists",
-/* 2060 */ "Plugin doesn't support this function",
+/* 2058 */ "Can't connect twice. Already connected",
+/* 2059 */ "Plugin %s could not be loaded: %s",
+/* 2060 */ "An attribute with same name already exists",
+/* 2061 */ "Plugin doesn't support this function",
""
};
@@ -110,6 +110,7 @@
/* 5013 */ "Read error: %s (%d)",
/* 5014 */ "Write error: %s (%d)",
/* 5015 */ "Error while uncompressing packet",
+ /* 5016 */ "Error while retrieving parameter from callback function",
""
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mariadb-connector-c-3.3.3-src/libmariadb/mariadb_lib.c
new/mariadb-connector-c-3.3.4-src/libmariadb/mariadb_lib.c
--- old/mariadb-connector-c-3.3.3-src/libmariadb/mariadb_lib.c 2022-11-07
09:09:29.000000000 +0100
+++ new/mariadb-connector-c-3.3.4-src/libmariadb/mariadb_lib.c 2023-01-16
12:12:46.000000000 +0100
@@ -1727,6 +1727,14 @@
if (ma_pvio_connect(pvio, &cinfo) != 0)
{
ma_pvio_close(pvio);
+ if (mysql->options.extension && mysql->options.extension->async_context &&
+ mysql->options.extension->async_context->pvio)
+ {
+ /* pvio delegated to mysql->net.pvio by ma_net_init().
+ * invalidate the pvio pointer in the async context */
+ mysql->options.extension->async_context->pvio = NULL;
+ }
+
if (is_multi)
{
connect_attempts++;
@@ -2139,7 +2147,7 @@
{
MYSQL_STMT *stmt= (MYSQL_STMT *)li_stmt->data;
stmt->mysql= NULL;
- SET_CLIENT_STMT_ERROR(stmt, CR_STMT_CLOSED, SQLSTATE_UNKNOWN,
function_name);
+ SET_CLIENT_STMT_ERROR(stmt, CR_STMT_CLOSED, SQLSTATE_UNKNOWN, 0,
function_name);
}
mysql->stmts= NULL;
}
@@ -2339,18 +2347,20 @@
const char *errmsg;
+ mysql->net.last_errno= error_nr;
+ ma_strmake(mysql->net.sqlstate, sqlstate, SQLSTATE_LENGTH);
+
if (!format)
{
- if (error_nr >= CR_MIN_ERROR && error_nr <= CR_MYSQL_LAST_ERROR)
+ if (IS_MYSQL_ERROR(error_nr) || IS_MARIADB_ERROR(error_nr))
errmsg= ER(error_nr);
- else if (error_nr >= CER_MIN_ERROR && error_nr <= CR_MARIADB_LAST_ERROR)
- errmsg= CER(error_nr);
- else
- errmsg= ER(CR_UNKNOWN_ERROR);
+ else {
+ snprintf(mysql->net.last_error, MYSQL_ERRMSG_SIZE - 1,
+ ER_UNKNOWN_ERROR_CODE, error_nr);
+ return;
+ }
}
- mysql->net.last_errno= error_nr;
- ma_strmake(mysql->net.sqlstate, sqlstate, SQLSTATE_LENGTH);
va_start(ap, format);
vsnprintf(mysql->net.last_error, MYSQL_ERRMSG_SIZE - 1,
format ? format : errmsg, ap);
@@ -3911,11 +3921,15 @@
*((char **)arg)= mysql->options.ssl_cipher;
break;
case MYSQL_OPT_SSL_CRL:
- *((char **)arg)= mysql->options.extension ? mysql->options.ssl_cipher :
NULL;
+ *((char **)arg)= mysql->options.extension ?
mysql->options.extension->ssl_crl : NULL;
break;
case MYSQL_OPT_SSL_CRLPATH:
*((char **)arg)= mysql->options.extension ?
mysql->options.extension->ssl_crlpath : NULL;
break;
+ case MARIADB_OPT_TLS_VERSION:
+ case MYSQL_OPT_TLS_VERSION:
+ *((char **)arg)= mysql->options.extension ?
mysql->options.extension->tls_version : NULL;
+ break;
case MYSQL_OPT_CONNECT_ATTRS:
/* mysql_get_optionsv(mysql, MYSQL_OPT_CONNECT_ATTRS, keys, vals,
elements) */
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mariadb-connector-c-3.3.3-src/libmariadb/mariadb_stmt.c
new/mariadb-connector-c-3.3.4-src/libmariadb/mariadb_stmt.c
--- old/mariadb-connector-c-3.3.3-src/libmariadb/mariadb_stmt.c 2022-11-07
09:09:29.000000000 +0100
+++ new/mariadb-connector-c-3.3.4-src/libmariadb/mariadb_stmt.c 2023-01-16
12:12:46.000000000 +0100
@@ -91,18 +91,35 @@
...)
{
va_list ap;
- const char *error= NULL;
- if (error_nr >= CR_MIN_ERROR && error_nr <= CR_MYSQL_LAST_ERROR)
- error= ER(error_nr);
- else if (error_nr >= CER_MIN_ERROR && error_nr <= CR_MARIADB_LAST_ERROR)
- error= CER(error_nr);
+ const char *errmsg;
stmt->last_errno= error_nr;
ma_strmake(stmt->sqlstate, sqlstate, SQLSTATE_LENGTH);
+
+ if (!format)
+ {
+ if (IS_MYSQL_ERROR(error_nr) || IS_MARIADB_ERROR(error_nr))
+ errmsg= ER(error_nr);
+ else {
+ snprintf(stmt->last_error, MYSQL_ERRMSG_SIZE - 1,
+ ER_UNKNOWN_ERROR_CODE, error_nr);
+ return;
+ }
+ }
+
+ /* Fix for CONC-627: If this is a server error message, we don't
+ need to substitute and possible variadic arguments will be
+ ignored */
+ if (!IS_MYSQL_ERROR(error_nr) && !IS_MARIADB_ERROR(error_nr))
+ {
+ strncpy(stmt->last_error, format, MYSQL_ERRMSG_SIZE - 1);
+ return;
+ }
+
va_start(ap, format);
- vsnprintf(stmt->last_error, MYSQL_ERRMSG_SIZE,
- format ? format : error ? error : "", ap);
+ vsnprintf(stmt->last_error, MYSQL_ERRMSG_SIZE - 1,
+ format ? format : errmsg, ap);
va_end(ap);
return;
}
@@ -718,6 +735,7 @@
size_t length= 1024;
size_t free_bytes= 0;
size_t null_byte_offset= 0;
+ uchar *tmp_start;
uint i;
uchar *start= NULL, *p;
@@ -746,8 +764,9 @@
{
size_t offset= p - start;
length+= offset + null_count + 20;
- if (!(start= (uchar *)realloc(start, length)))
+ if (!(tmp_start= (uchar *)realloc(start, length)))
goto mem_error;
+ start= tmp_start;
p= start + offset;
}
@@ -769,8 +788,9 @@
{
size_t offset= p - start;
length= offset + stmt->param_count * 2 + 20;
- if (!(start= (uchar *)realloc(start, length)))
+ if (!(tmp_start= (uchar *)realloc(start, length)))
goto mem_error;
+ start= tmp_start;
p= start + offset;
}
for (i = 0; i < stmt->param_count; i++)
@@ -839,8 +859,9 @@
{
size_t offset= p - start;
length= MAX(2 * length, offset + size + 20);
- if (!(start= (uchar *)realloc(start, length)))
+ if (!(tmp_start= (uchar *)realloc(start, length)))
goto mem_error;
+ start= tmp_start;
p= start + offset;
}
if (((stmt->params[i].is_null && *stmt->params[i].is_null) ||
@@ -913,6 +934,7 @@
size_t length= 1024;
size_t free_bytes= 0;
ushort flags= 0;
+ uchar *tmp_start;
uint i, j;
uchar *start= NULL, *p;
@@ -933,7 +955,10 @@
/* preallocate length bytes */
if (!(start= p= (uchar *)malloc(length)))
- goto mem_error;
+ {
+ SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
+ goto error;
+ }
int4store(p, stmt->stmt_id);
p += STMT_ID_LENGTH;
@@ -964,8 +989,12 @@
{
size_t offset= p - start;
length= offset + stmt->param_count * 2 + 20;
- if (!(start= (uchar *)realloc(start, length)))
- goto mem_error;
+ if (!(tmp_start= (uchar *)realloc(start, length)))
+ {
+ SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
+ goto error;
+ }
+ start= tmp_start;
p= start + offset;
}
for (i = 0; i < stmt->param_count; i++)
@@ -983,7 +1012,13 @@
/* If callback for parameters was specified, we need to
update bind information for new row */
if (stmt->param_callback)
- stmt->param_callback(stmt->user_data, stmt->params, j);
+ {
+ if (stmt->param_callback(stmt->user_data, stmt->params, j))
+ {
+ SET_CLIENT_STMT_ERROR(stmt, CR_ERR_STMT_PARAM_CALLBACK,
SQLSTATE_UNKNOWN, 0);
+ goto error;
+ }
+ }
if (mysql_stmt_skip_paramset(stmt, j))
continue;
@@ -1050,8 +1085,12 @@
{
size_t offset= p - start;
length= MAX(2 * length, offset + size + 20);
- if (!(start= (uchar *)realloc(start, length)))
- goto mem_error;
+ if (!(tmp_start= (uchar *)realloc(start, length)))
+ {
+ SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
+ goto error;
+ }
+ start= tmp_start;
p= start + offset;
}
@@ -1067,8 +1106,7 @@
stmt->send_types_to_server= 0;
*request_len = (size_t)(p - start);
return start;
-mem_error:
- SET_CLIENT_STMT_ERROR(stmt, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0);
+error:
free(start);
*request_len= 0;
return NULL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mariadb-connector-c-3.3.3-src/unittest/libmariadb/async.c
new/mariadb-connector-c-3.3.4-src/unittest/libmariadb/async.c
--- old/mariadb-connector-c-3.3.3-src/unittest/libmariadb/async.c
2022-11-07 09:09:29.000000000 +0100
+++ new/mariadb-connector-c-3.3.4-src/unittest/libmariadb/async.c
2023-01-16 12:12:46.000000000 +0100
@@ -248,12 +248,62 @@
return OK;
}
+static int test_conc622(MYSQL *my __attribute__((unused)))
+{
+ int rc;
+ MYSQL mysql, *ret;
+ int status;
+ uint default_timeout;
+ int i;
+ const char *invalid_host= "1.0.0.0";
+
+ if (skip_async)
+ return SKIP;
+
+ for (i=0; i < 5; i++)
+ {
+ mysql_init(&mysql);
+ rc= mysql_options(&mysql, MYSQL_OPT_NONBLOCK, 0);
+ check_mysql_rc(rc, (MYSQL *)&mysql);
+
+ /* set timeouts to 300 microseconds */
+ default_timeout= 3;
+ mysql_options(&mysql, MYSQL_OPT_READ_TIMEOUT, &default_timeout);
+ mysql_options(&mysql, MYSQL_OPT_CONNECT_TIMEOUT, &default_timeout);
+ mysql_options(&mysql, MYSQL_OPT_WRITE_TIMEOUT, &default_timeout);
+ mysql_options(&mysql, MYSQL_READ_DEFAULT_GROUP, "myapp");
+
+ /* Returns 0 when done, else flag for what to wait for when need to block.
*/
+ status= mysql_real_connect_start(&ret, &mysql, invalid_host, username,
password, schema, port, socketname, 0);
+ while (status)
+ {
+ status= wait_for_mysql(&mysql, status);
+ status= mysql_real_connect_cont(&ret, &mysql, status);
+ }
+ if (!ret)
+ {
+ status= mysql_close_start(&mysql);
+ while (status)
+ {
+ status= wait_for_mysql(&mysql, status);
+ status= mysql_close_cont(&mysql, status);
+ }
+ } else {
+ diag("Expected error when connecting to host '%s'", invalid_host);
+ diag("Connected to %s", mysql_get_server_info(&mysql));
+ return FAIL;
+ }
+ }
+ return OK;
+}
+
struct my_tests_st my_tests[] = {
{"test_async", test_async, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"async1", async1, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"test_conc131", test_conc131, TEST_CONNECTION_NONE, 0, NULL, NULL},
{"test_conc129", test_conc129, TEST_CONNECTION_NONE, 0, NULL, NULL},
+ {"test_conc622", test_conc622, TEST_CONNECTION_NONE, 0, NULL, NULL},
{NULL, NULL, 0, 0, NULL, NULL}
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mariadb-connector-c-3.3.3-src/unittest/libmariadb/basic-t.c
new/mariadb-connector-c-3.3.4-src/unittest/libmariadb/basic-t.c
--- old/mariadb-connector-c-3.3.3-src/unittest/libmariadb/basic-t.c
2022-11-07 09:09:29.000000000 +0100
+++ new/mariadb-connector-c-3.3.4-src/unittest/libmariadb/basic-t.c
2023-01-16 12:12:46.000000000 +0100
@@ -806,7 +806,48 @@
return OK;
}
+static int test_conc624(MYSQL *mysql)
+{
+ MYSQL_STMT *stmt= mysql_stmt_init(mysql);
+ char errmsg[MYSQL_ERRMSG_SIZE];
+
+ SET_CLIENT_STMT_ERROR(stmt, 9000, SQLSTATE_UNKNOWN, 0);
+ snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 9000);
+ diag("stmt_error: %s", mysql_stmt_error(stmt));
+ FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "expected undefined error
9000");
+
+ SET_CLIENT_STMT_ERROR(stmt, 0, SQLSTATE_UNKNOWN, 0);
+ snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 0);
+ FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "expected undefined error
0");
+
+ SET_CLIENT_STMT_ERROR(stmt, 4999, SQLSTATE_UNKNOWN, 0);
+ snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 4999);
+ FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "expected undefined error
4999");
+
+ my_set_error(mysql, 4999, SQLSTATE_UNKNOWN, 0);
+ snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 4999);
+ FAIL_IF(strcmp(mysql_error(mysql), errmsg), "expected undefined error 4999");
+
+ my_set_error(mysql, 0, SQLSTATE_UNKNOWN, 0);
+ snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 0);
+ FAIL_IF(strcmp(mysql_error(mysql), errmsg), "expected undefined error 0");
+
+ my_set_error(mysql, 9000, SQLSTATE_UNKNOWN, 0);
+ snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER_UNKNOWN_ERROR_CODE, 9000);
+ FAIL_IF(strcmp(mysql_error(mysql), errmsg), "expected undefined error 9000");
+
+ /* test if SET_CLIENT_STMT_ERROR works with variadic arguments */
+ SET_CLIENT_STMT_ERROR(stmt, CR_STMT_CLOSED, SQLSTATE_UNKNOWN, 0, "foobar");
+ snprintf(errmsg, MYSQL_ERRMSG_SIZE, ER(CR_STMT_CLOSED), "foobar");
+ FAIL_IF(strcmp(mysql_stmt_error(stmt), errmsg), "error when passing variadic
arguments to prepared stmt error function");
+
+ mysql_stmt_close(stmt);
+
+ return OK;
+}
+
struct my_tests_st my_tests[] = {
+ {"test_conc624", test_conc624, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"test_conc75", test_conc75, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"test_conc74", test_conc74, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"test_conc71", test_conc71, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mariadb-connector-c-3.3.3-src/unittest/libmariadb/charset.c
new/mariadb-connector-c-3.3.4-src/unittest/libmariadb/charset.c
--- old/mariadb-connector-c-3.3.3-src/unittest/libmariadb/charset.c
2022-11-07 09:09:29.000000000 +0100
+++ new/mariadb-connector-c-3.3.4-src/unittest/libmariadb/charset.c
2023-01-16 12:12:46.000000000 +0100
@@ -829,11 +829,16 @@
res= mysql_store_result(mysql);
while ((row = mysql_fetch_row(res)))
{
- int id= atoi(row[0]);
- if (!mariadb_get_charset_by_nr(id))
+ int id;
+
+ if (row[0])
{
- diag("%04d %s %s", id, row[1], row[2]);
- found++;
+ id= atoi(row[0]);
+ if (!mariadb_get_charset_by_nr(id))
+ {
+ diag("%04d %s %s", id, row[1], row[2]);
+ found++;
+ }
}
}
mysql_free_result(res);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mariadb-connector-c-3.3.3-src/unittest/libmariadb/connection.c
new/mariadb-connector-c-3.3.4-src/unittest/libmariadb/connection.c
--- old/mariadb-connector-c-3.3.3-src/unittest/libmariadb/connection.c
2022-11-07 09:09:29.000000000 +0100
+++ new/mariadb-connector-c-3.3.4-src/unittest/libmariadb/connection.c
2023-01-16 12:12:46.000000000 +0100
@@ -1667,6 +1667,7 @@
if (rc)
{
+ diag("Error: %s", mysql_error(my));
diag("caching_sha256_password not supported");
return SKIP;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mariadb-connector-c-3.3.3-src/unittest/libmariadb/my_test.h
new/mariadb-connector-c-3.3.4-src/unittest/libmariadb/my_test.h
--- old/mariadb-connector-c-3.3.3-src/unittest/libmariadb/my_test.h
2022-11-07 09:09:29.000000000 +0100
+++ new/mariadb-connector-c-3.3.4-src/unittest/libmariadb/my_test.h
2023-01-16 12:12:46.000000000 +0100
@@ -32,6 +32,7 @@
#include <stdlib.h>
#include <ma_server_error.h>
#include <mysql/client_plugin.h>
+#include <errmsg.h>
#ifndef WIN32
#include <pthread.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/mariadb-connector-c-3.3.3-src/unittest/libmariadb/ps_bugs.c
new/mariadb-connector-c-3.3.4-src/unittest/libmariadb/ps_bugs.c
--- old/mariadb-connector-c-3.3.3-src/unittest/libmariadb/ps_bugs.c
2022-11-07 09:09:29.000000000 +0100
+++ new/mariadb-connector-c-3.3.4-src/unittest/libmariadb/ps_bugs.c
2023-01-16 12:12:46.000000000 +0100
@@ -5587,7 +5587,79 @@
return OK;
}
+my_bool conc623_param_callback(void *data __attribute((unused)),
+ MYSQL_BIND *bind __attribute((unused)),
+ unsigned int row_nr __attribute((unused)))
+{
+ return 1;
+}
+
+static int test_conc623(MYSQL *mysql)
+{
+ int rc;
+ unsigned int paramcount= 1;
+ unsigned int array_size= 2;
+ MYSQL_BIND bind;
+
+ MYSQL_STMT *stmt= mysql_stmt_init(mysql);
+
+ rc= mysql_query(mysql, "CREATE OR REPLACE TEMPORARY TABLE t1 (a int)");
+
+ rc= mysql_stmt_attr_set(stmt, STMT_ATTR_CB_USER_DATA, mysql);
+ check_stmt_rc(rc, stmt);
+
+ rc= mysql_stmt_attr_set(stmt, STMT_ATTR_ARRAY_SIZE, &array_size);
+ check_stmt_rc(rc, stmt);
+
+ rc= mysql_stmt_attr_set(stmt, STMT_ATTR_PREBIND_PARAMS, ¶mcount);
+ check_stmt_rc(rc, stmt);
+
+ rc= mysql_stmt_attr_set(stmt, STMT_ATTR_CB_PARAM, conc623_param_callback);
+ check_stmt_rc(rc, stmt);
+
+ bind.buffer_type= MYSQL_TYPE_LONG;
+ rc= mysql_stmt_bind_param(stmt, &bind);
+ check_stmt_rc(rc, stmt);
+
+ rc= mysql_stmt_prepare(stmt, SL("INSERT INTO t1 VALUES (?)"));
+ check_stmt_rc(rc, stmt);
+
+ rc= mysql_stmt_execute(stmt);
+ if (!rc)
+ {
+ diag("Error expected from callback function");
+ mysql_stmt_close(stmt);
+ return FAIL;
+ }
+
+ diag("Error (expected) %s", mysql_stmt_error(stmt));
+ mysql_stmt_close(stmt);
+ return OK;
+}
+
+static int test_conc627(MYSQL *mysql)
+{
+ MYSQL_STMT *stmt= mysql_stmt_init(mysql);
+ int rc;
+
+ rc= mysql_stmt_prepare(stmt, SL("show grants for mysqltest_8"));
+ check_stmt_rc(rc, stmt);
+
+ rc= mysql_stmt_execute(stmt);
+ check_stmt_rc(rc, stmt);
+
+ mysql_stmt_store_result(stmt);
+ FAIL_IF(!mysql_stmt_errno(stmt), "Expected error");
+ FAIL_IF(strcmp(mysql_error(mysql), mysql_stmt_error(stmt)), "Error messages
differ");
+
+ mysql_stmt_close(stmt);
+
+ return OK;
+}
+
struct my_tests_st my_tests[] = {
+ {"test_conc623", test_conc623, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
+ {"test_conc627", test_conc627, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"test_mdev19838", test_mdev19838, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"test_conc525", test_conc525, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"test_conc566", test_conc566, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},