From 8057e30909d8433ca102bd31d3ba855cc3441043 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Apr 2006 19:29:22 -0700 Subject: [PATCH] Bug #18495: mysqltest does not use the correct error number When looking up the error number for named errors in mysqltest .test files, we inadvertantly would match ER_WRONG_VALUE against ER_WRONG_VALUE_COUNT because we were using the length of the shorter string in strncmp(). Now we double-check the length of matches to make sure it was a complete match. client/mysqltest.c: Check the length of the error name to make sure it wasn't just a partial match mysql-test/t/events.test: Replace error numbers with error names, with side-effect of testing Bug #18495. --- client/mysqltest.c | 8 +++++++- mysql-test/t/events.test | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index cfd69e45ba7..b630de8be4e 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -1956,7 +1956,13 @@ static uint get_errcodes(match_err *to,struct st_query *q) ; for (; e->name; e++) { - if (!strncmp(start, e->name, (int) (p - start))) + /* + If we get a match, we need to check the length of the name we + matched against in case it was longer than what we are checking + (as in ER_WRONG_VALUE vs. ER_WRONG_VALUE_COUNT). + */ + if (!strncmp(start, e->name, (int) (p - start)) && + strlen(e->name) == (p - start)) { to[count].code.errnum= (uint) e->code; to[count].type= ERR_ERRNO; diff --git a/mysql-test/t/events.test b/mysql-test/t/events.test index f80297682b7..fbcd4924d56 100644 --- a/mysql-test/t/events.test +++ b/mysql-test/t/events.test @@ -320,9 +320,9 @@ drop event one_event; create event e_26 on schedule at '2017-01-01 00:00:00' disable do set @a = 5; select db, name, body, definer, convert_tz(execute_at, 'UTC', 'SYSTEM'), on_completion from mysql.event; drop event e_26; ---error 1504 +--error ER_WRONG_VALUE create event e_26 on schedule at NULL disabled do set @a = 5; ---error 1504 +--error ER_WRONG_VALUE create event e_26 on schedule at 'definitely not a datetime' disabled do set @a = 5; set names utf8;