mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
Manual merge.
This commit is contained in:
commit
d38c4fcad0
7 changed files with 212 additions and 146 deletions
|
@ -839,7 +839,9 @@ static int get_options(int argc, char **argv)
|
||||||
opt_reconnect= 0;
|
opt_reconnect= 0;
|
||||||
connect_flag= 0; /* Not in interactive mode */
|
connect_flag= 0; /* Not in interactive mode */
|
||||||
}
|
}
|
||||||
if (!(charset_info= get_charset_by_csname(default_charset,
|
|
||||||
|
if (strcmp(default_charset, charset_info->csname) &&
|
||||||
|
!(charset_info= get_charset_by_csname(default_charset,
|
||||||
MY_CS_PRIMARY, MYF(MY_WME))))
|
MY_CS_PRIMARY, MYF(MY_WME))))
|
||||||
exit(1);
|
exit(1);
|
||||||
if (argc > 1)
|
if (argc > 1)
|
||||||
|
|
|
@ -311,7 +311,8 @@ static int get_options(int *argc, char ***argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: This variable is not yet used */
|
/* TODO: This variable is not yet used */
|
||||||
if (!(charset_info= get_charset_by_csname(default_charset,
|
if (strcmp(default_charset, charset_info->csname) &&
|
||||||
|
!(charset_info= get_charset_by_csname(default_charset,
|
||||||
MY_CS_PRIMARY, MYF(MY_WME))))
|
MY_CS_PRIMARY, MYF(MY_WME))))
|
||||||
exit(1);
|
exit(1);
|
||||||
if (*argc > 0 && opt_alldbs)
|
if (*argc > 0 && opt_alldbs)
|
||||||
|
|
|
@ -536,7 +536,8 @@ static int get_options(int *argc, char ***argv)
|
||||||
my_progname);
|
my_progname);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
if (!(charset_info= get_charset_by_csname(default_charset,
|
if (strcmp(default_charset, charset_info->csname) &&
|
||||||
|
!(charset_info= get_charset_by_csname(default_charset,
|
||||||
MY_CS_PRIMARY, MYF(MY_WME))))
|
MY_CS_PRIMARY, MYF(MY_WME))))
|
||||||
exit(1);
|
exit(1);
|
||||||
if ((*argc < 1 && !opt_alldbs) || (*argc > 0 && opt_alldbs))
|
if ((*argc < 1 && !opt_alldbs) || (*argc > 0 && opt_alldbs))
|
||||||
|
|
|
@ -238,7 +238,8 @@ static int get_options(int *argc, char ***argv)
|
||||||
fprintf(stderr, "You can't use --ignore (-i) and --replace (-r) at the same time.\n");
|
fprintf(stderr, "You can't use --ignore (-i) and --replace (-r) at the same time.\n");
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
if (!(charset_info= get_charset_by_csname(default_charset,
|
if (strcmp(default_charset, charset_info->csname) &&
|
||||||
|
!(charset_info= get_charset_by_csname(default_charset,
|
||||||
MY_CS_PRIMARY, MYF(MY_WME))))
|
MY_CS_PRIMARY, MYF(MY_WME))))
|
||||||
exit(1);
|
exit(1);
|
||||||
if (*argc < 2)
|
if (*argc < 2)
|
||||||
|
|
|
@ -3845,7 +3845,23 @@ mysql_parse(THD *thd, char *inBuf, uint length)
|
||||||
if (query_cache_send_result_to_client(thd, inBuf, length) <= 0)
|
if (query_cache_send_result_to_client(thd, inBuf, length) <= 0)
|
||||||
{
|
{
|
||||||
LEX *lex=lex_start(thd, (uchar*) inBuf, length);
|
LEX *lex=lex_start(thd, (uchar*) inBuf, length);
|
||||||
if (!yyparse((void *)thd) && ! thd->is_fatal_error)
|
if (!yyparse((void *)thd) && ! thd->is_fatal_error &&
|
||||||
|
/*
|
||||||
|
If this is not a multiple query, ensure that it has been
|
||||||
|
successfully parsed until the last character. This is to prevent
|
||||||
|
against a wrong (too big) length passed to mysql_real_query(),
|
||||||
|
mysql_prepare()... which can generate garbage characters at the
|
||||||
|
end. If the query was initially multiple, found_colon will be false
|
||||||
|
only when we are in the last query; this last query had already
|
||||||
|
been end-spaces-stripped by alloc_query() in dispatch_command(); as
|
||||||
|
end spaces are the only thing we accept at the end of a query, and
|
||||||
|
they have been stripped already, here we can require that nothing
|
||||||
|
remains after parsing.
|
||||||
|
*/
|
||||||
|
(thd->lex->found_colon ||
|
||||||
|
(char*)(thd->lex->ptr) == (thd->query+thd->query_length+1) ||
|
||||||
|
/* yyerror() will show the garbage chars to the user */
|
||||||
|
(yyerror("syntax error"), 0)))
|
||||||
{
|
{
|
||||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
||||||
if (mqh_used && thd->user_connect &&
|
if (mqh_used && thd->user_connect &&
|
||||||
|
|
|
@ -909,7 +909,15 @@ bool mysql_stmt_prepare(THD *thd, char *packet, uint packet_length)
|
||||||
lex->safe_to_cache_query= 0;
|
lex->safe_to_cache_query= 0;
|
||||||
lex->param_count= 0;
|
lex->param_count= 0;
|
||||||
|
|
||||||
if (yyparse((void *)thd) || thd->is_fatal_error || send_prepare_results(stmt))
|
if (yyparse((void *)thd) || thd->is_fatal_error ||
|
||||||
|
/*
|
||||||
|
Check for wrong (too big) length passed to mysql_prepare() resulting in
|
||||||
|
garbage at the end of the query. There is a similar check in mysql_parse().
|
||||||
|
*/
|
||||||
|
(!thd->lex->found_colon &&
|
||||||
|
(char*)(thd->lex->ptr) != (thd->query+thd->query_length+1) &&
|
||||||
|
/* yyerror() will show the garbage chars to the user */
|
||||||
|
(yyerror("syntax error"), 1)) || send_prepare_results(stmt))
|
||||||
goto yyparse_err;
|
goto yyparse_err;
|
||||||
|
|
||||||
lex_end(lex);
|
lex_end(lex);
|
||||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue