1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

Bug #42064: low memory crash when importing hex strings, in

Item_hex_string::Item_hex_string

The status of memory allocation in the Lex_input_stream (called
from the Parser_state constructor) was not checked which led to
a parser crash in case of the out-of-memory error.

The solution is to introduce new init() member function in
Parser_state and Lex_input_stream so that status of memory
allocation can be returned to the caller.
This commit is contained in:
Alexey Kopytov
2010-05-21 15:23:48 +04:00
parent f512cb4eaf
commit 779e2a9686
16 changed files with 186 additions and 65 deletions

View File

@@ -1147,9 +1147,38 @@ enum enum_comment_state
class Lex_input_stream
{
public:
Lex_input_stream(THD *thd, const char* buff, unsigned int length);
~Lex_input_stream();
Lex_input_stream() :
yylineno(1),
yytoklen(0),
yylval(NULL),
m_tok_start(NULL),
m_tok_end(NULL),
m_tok_start_prev(NULL),
m_echo(TRUE),
m_cpp_tok_start(NULL),
m_cpp_tok_start_prev(NULL),
m_cpp_tok_end(NULL),
m_body_utf8(NULL),
m_cpp_utf8_processed_ptr(NULL),
next_state(MY_LEX_START),
found_semicolon(NULL),
stmt_prepare_mode(FALSE),
in_comment(NO_COMMENT),
m_underscore_cs(NULL)
{
}
~Lex_input_stream()
{
}
/**
Object initializer. Must be called before usage.
@retval FALSE OK
@retval TRUE Error
*/
bool init(THD *thd, const char *buff, unsigned int length);
/**
Set the echo mode.
@@ -1930,10 +1959,21 @@ public:
class Parser_state
{
public:
Parser_state(THD *thd, const char* buff, unsigned int length)
: m_lip(thd, buff, length), m_yacc()
Parser_state()
: m_yacc()
{}
/**
Object initializer. Must be called before usage.
@retval FALSE OK
@retval TRUE Error
*/
bool init(THD *thd, const char *buff, unsigned int length)
{
return m_lip.init(thd, buff, length);
}
~Parser_state()
{}