summaryrefslogtreecommitdiff
path: root/sql/sql_lex.cc
diff options
context:
space:
mode:
authorMarc Olivier Bergeron <mocb28@gmail.com>2021-11-17 17:14:27 +1100
committerDaniel Black <daniel@mariadb.org>2021-11-24 16:46:01 +1100
commit749d8dedc323154f4aa8a6e26dd464696e8c3fed (patch)
treedbffe40522a64bca799143dfaa7eb7fc7504eb62 /sql/sql_lex.cc
parentfe065f8d90b05c05ad9ca63a773a8f933b19e4eb (diff)
downloadmariadb-git-749d8dedc323154f4aa8a6e26dd464696e8c3fed.tar.gz
MDEV-27066: Fixed scientific notation parsing bug
The bug occurs where the float token containing a dot with an 'e' notation was dropped from the request completely. This causes a manner of invalid SQL statements like: select id 1.e, char 10.e(id 2.e), concat 3.e('a'12356.e,'b'1.e,'c'1.1234e)1.e, 12 1.e*2 1.e, 12 1.e/2 1.e, 12 1.e|2 1.e, 12 1.e^2 1.e, 12 1.e%2 1.e, 12 1.e&2 from test; To be parsed correctly as if it was: select id, char(id), concat('a','b','c'), 12*2, 12/2, 12|2, 12^2, 12%2, 12&2 from test.test; This correct parsing occurs when e is followed by any of: ( ) . , | & % * ^ /
Diffstat (limited to 'sql/sql_lex.cc')
-rw-r--r--sql/sql_lex.cc3
1 files changed, 1 insertions, 2 deletions
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index b7ed632ed12..ed0b4b36553 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -1664,8 +1664,7 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd)
c = lip->yyGet(); // Skip sign
if (!my_isdigit(cs,c))
{ // No digit after sign
- state= MY_LEX_CHAR;
- break;
+ return (ABORT_SYM);
}
while (my_isdigit(cs,lip->yyGet())) ;
yylval->lex_str=get_token(lip, 0, lip->yyLength());