Init "saved_expected_errors" at program start, avoids crash where --error is first command

strcmp -> strncmp
parent dedea59a
...@@ -2544,11 +2544,11 @@ void do_get_errcodes(struct st_command *command) ...@@ -2544,11 +2544,11 @@ void do_get_errcodes(struct st_command *command)
- May contain only digits[0-9] and _uppercase_ letters - May contain only digits[0-9] and _uppercase_ letters
*/ */
p++; /* Step past the S */ p++; /* Step past the S */
if (end - p != SQLSTATE_LENGTH) if ((end - p) != SQLSTATE_LENGTH)
die("The sqlstate must be exactly %d chars long", SQLSTATE_LENGTH); die("The sqlstate must be exactly %d chars long", SQLSTATE_LENGTH);
/* Check sqlstate string validity */ /* Check sqlstate string validity */
while (*p && p != end) while (*p && p < end)
{ {
if (my_isdigit(charset_info, *p) || my_isupper(charset_info, *p)) if (my_isdigit(charset_info, *p) || my_isupper(charset_info, *p))
*to_ptr++= *p++; *to_ptr++= *p++;
...@@ -4652,7 +4652,8 @@ void handle_error(struct st_command *command, ...@@ -4652,7 +4652,8 @@ void handle_error(struct st_command *command,
*/ */
if (err_errno == CR_SERVER_LOST || if (err_errno == CR_SERVER_LOST ||
err_errno == CR_SERVER_GONE_ERROR) err_errno == CR_SERVER_GONE_ERROR)
die("require query '%s' failed: %d: %s", command->query, err_errno, err_error); die("require query '%s' failed: %d: %s", command->query,
err_errno, err_error);
/* Abort the run of this test, pass the failed query as reason */ /* Abort the run of this test, pass the failed query as reason */
abort_not_supported_test("Query '%s' failed, required functionality" \ abort_not_supported_test("Query '%s' failed, required functionality" \
...@@ -4669,8 +4670,8 @@ void handle_error(struct st_command *command, ...@@ -4669,8 +4670,8 @@ void handle_error(struct st_command *command,
if (((command->expected_errors.err[i].type == ERR_ERRNO) && if (((command->expected_errors.err[i].type == ERR_ERRNO) &&
(command->expected_errors.err[i].code.errnum == err_errno)) || (command->expected_errors.err[i].code.errnum == err_errno)) ||
((command->expected_errors.err[i].type == ERR_SQLSTATE) && ((command->expected_errors.err[i].type == ERR_SQLSTATE) &&
(strcmp(command->expected_errors.err[i].code.sqlstate, (strncmp(command->expected_errors.err[i].code.sqlstate,
err_sqlstate) == 0))) err_sqlstate, SQLSTATE_LENGTH) == 0)))
{ {
if (!disable_result_log) if (!disable_result_log)
{ {
...@@ -4695,7 +4696,7 @@ void handle_error(struct st_command *command, ...@@ -4695,7 +4696,7 @@ void handle_error(struct st_command *command,
} }
DBUG_PRINT("info",("i: %d expected_errors: %d", i, DBUG_PRINT("info",("i: %d expected_errors: %d", i,
command->expected_errors)); command->expected_errors.count));
if (!disable_result_log) if (!disable_result_log)
{ {
...@@ -5423,6 +5424,9 @@ int main(int argc, char **argv) ...@@ -5423,6 +5424,9 @@ int main(int argc, char **argv)
save_file[0]= 0; save_file[0]= 0;
TMPDIR[0]= 0; TMPDIR[0]= 0;
/* Init expected errors */
memset(&saved_expected_errors, 0, sizeof(saved_expected_errors));
/* Init connections */ /* Init connections */
memset(connections, 0, sizeof(connections)); memset(connections, 0, sizeof(connections));
connections_end= connections + connections_end= connections +
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment