mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Fix for bug #4809 (Backticks not handled in mysql)
This commit is contained in:
@@ -2201,17 +2201,49 @@ static int com_source(String *buffer, char *line)
|
|||||||
static int
|
static int
|
||||||
com_use(String *buffer __attribute__((unused)), char *line)
|
com_use(String *buffer __attribute__((unused)), char *line)
|
||||||
{
|
{
|
||||||
char *tmp, buff[FN_REFLEN + 1];
|
char tmp[FN_REFLEN], buff[FN_REFLEN + 1];
|
||||||
MYSQL_RES *res;
|
MYSQL_RES *res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
|
char *c_buff, *c_tmp;
|
||||||
|
|
||||||
while (isspace(*line))
|
while (isspace(*line))
|
||||||
line++;
|
line++;
|
||||||
strnmov(buff,line,sizeof(buff)-1); // Don't destroy history
|
strnmov(buff,line,sizeof(buff)-1); // Don't destroy history
|
||||||
if (buff[0] == '\\') // Short command
|
if (buff[0] == '\\') // Short command
|
||||||
buff[1]=' ';
|
buff[1]=' ';
|
||||||
tmp=(char *) strtok(buff," \t;"); // Skip connect command
|
c_buff= buff;
|
||||||
if (!tmp || !(tmp=(char *) strtok(NullS," \t;")))
|
while ((*c_buff != ' ') && (*c_buff != '\t')) // Skip connect command
|
||||||
|
c_buff++;
|
||||||
|
c_buff++;
|
||||||
|
|
||||||
|
while ((*c_buff == ' ') || (*c_buff == '\t'))
|
||||||
|
c_buff++;
|
||||||
|
c_tmp= tmp;
|
||||||
|
if (*c_buff == '`') // Handling backticks
|
||||||
|
{
|
||||||
|
c_buff++;
|
||||||
|
for (; *c_buff; c_tmp++)
|
||||||
|
{
|
||||||
|
if (*c_buff == '`')
|
||||||
|
{
|
||||||
|
if (c_buff[1] == '`')
|
||||||
|
{
|
||||||
|
*c_tmp= '`';
|
||||||
|
c_buff+= 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*c_tmp= *(c_buff++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
for (; !strchr(" \t;", *c_buff); c_buff++, c_tmp++)
|
||||||
|
*c_tmp= *c_buff;
|
||||||
|
*c_tmp= '\0';
|
||||||
|
|
||||||
|
if (!*tmp)
|
||||||
{
|
{
|
||||||
put_info("USE must be followed by a database name",INFO_ERROR);
|
put_info("USE must be followed by a database name",INFO_ERROR);
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user