diff options
author | Marc Olivier Bergeron <mocb28@gmail.com> | 2021-11-17 17:14:27 +1100 |
---|---|---|
committer | Daniel Black <daniel@mariadb.org> | 2021-11-24 16:46:01 +1100 |
commit | 749d8dedc323154f4aa8a6e26dd464696e8c3fed (patch) | |
tree | dbffe40522a64bca799143dfaa7eb7fc7504eb62 /sql/sql_lex.cc | |
parent | fe065f8d90b05c05ad9ca63a773a8f933b19e4eb (diff) | |
download | mariadb-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.cc | 3 |
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()); |