Commit 913e3a84 authored by Venkata Sidagam's avatar Venkata Sidagam

Bug #12615411 - server side help doesn't work as first statement

Problem description:
Giving "help 'contents'" in the mysql client as a first statement
gives error

Analysis:
In com_server_help() function the "server_cmd" variable was
initialised with buffer->ptr(). And the "server_cmd" variable is not
updated since we are passing "'contents'"(with single quote) so the
buffer->ptr() consists of the previous buffer values and it was sent
to the mysql_real_query() hence we are getting error.

Fix:
We are not initialising the "server_cmd" variable and we are updating
the variable with "server_cmd= cmd_buf" in any of the case i.e with
single quote or without single quote for the contents.
As part of error message improvement, added new error message in case
of "help 'contents'".

client/mysql.cc:
  com_server_help(): Properly updated the server_cmd variable and improved
  the error message.
parent ddcd6867
...@@ -2803,7 +2803,7 @@ static int com_server_help(String *buffer __attribute__((unused)), ...@@ -2803,7 +2803,7 @@ static int com_server_help(String *buffer __attribute__((unused)),
char *line __attribute__((unused)), char *help_arg) char *line __attribute__((unused)), char *help_arg)
{ {
MYSQL_ROW cur; MYSQL_ROW cur;
const char *server_cmd= buffer->ptr(); const char *server_cmd;
char cmd_buf[100 + 1]; char cmd_buf[100 + 1];
MYSQL_RES *result; MYSQL_RES *result;
int error; int error;
...@@ -2818,9 +2818,12 @@ static int com_server_help(String *buffer __attribute__((unused)), ...@@ -2818,9 +2818,12 @@ static int com_server_help(String *buffer __attribute__((unused)),
*++end_arg= '\0'; *++end_arg= '\0';
} }
(void) strxnmov(cmd_buf, sizeof(cmd_buf), "help '", help_arg, "'", NullS); (void) strxnmov(cmd_buf, sizeof(cmd_buf), "help '", help_arg, "'", NullS);
server_cmd= cmd_buf;
} }
else
(void) strxnmov(cmd_buf, sizeof(cmd_buf), "help ", help_arg, NullS);
server_cmd= cmd_buf;
if (!status.batch) if (!status.batch)
{ {
old_buffer= *buffer; old_buffer= *buffer;
...@@ -2888,6 +2891,11 @@ static int com_server_help(String *buffer __attribute__((unused)), ...@@ -2888,6 +2891,11 @@ static int com_server_help(String *buffer __attribute__((unused)),
else else
{ {
put_info("\nNothing found", INFO_INFO); put_info("\nNothing found", INFO_INFO);
if (strncasecmp(server_cmd, "help 'contents'", 15) == 0)
{
put_info("\nPlease check if 'help tables' are loaded.\n", INFO_INFO);
goto err;
}
put_info("Please try to run 'help contents' for a list of all accessible topics\n", INFO_INFO); put_info("Please try to run 'help contents' for a list of all accessible topics\n", INFO_INFO);
} }
} }
......
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