Skip to content

Commit

Permalink
Fix for CONC-627:
Browse files Browse the repository at this point in the history
Don't substitute parameters in server error messages in
prepeated statement error handler function.
  • Loading branch information
9EOR9 committed Jan 16, 2023
1 parent 173112c commit 8952358
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
9 changes: 9 additions & 0 deletions libmariadb/mariadb_stmt.c
Expand Up @@ -106,6 +106,15 @@ void stmt_set_error(MYSQL_STMT *stmt,
}
}

/* 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 - 1,
format ? format : errmsg, ap);
Expand Down
21 changes: 21 additions & 0 deletions unittest/libmariadb/ps_bugs.c
Expand Up @@ -5487,7 +5487,28 @@ static int test_mdev19838(MYSQL *mysql)
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_conc627", test_conc627, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"test_mdev19838", test_mdev19838, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"test_conc566", test_conc566, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"test_conc512", test_conc512, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
Expand Down

0 comments on commit 8952358

Please sign in to comment.