mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge branch '5.5' into 10.0
This commit is contained in:
@ -1405,7 +1405,7 @@ READ_INFO::READ_INFO(File file_par, uint tot_length, CHARSET_INFO *cs,
|
||||
set_if_bigger(length,line_start.length());
|
||||
stack=stack_pos=(int*) sql_alloc(sizeof(int)*length);
|
||||
|
||||
if (!(buffer=(uchar*) my_malloc(buff_length+1,MYF(MY_THREAD_SPECIFIC))))
|
||||
if (!(buffer=(uchar*) my_malloc(buff_length+1,MYF(MY_WME | MY_THREAD_SPECIFIC))))
|
||||
error=1; /* purecov: inspected */
|
||||
else
|
||||
{
|
||||
@ -1597,37 +1597,50 @@ int READ_INFO::read_field()
|
||||
}
|
||||
}
|
||||
#ifdef USE_MB
|
||||
if (my_mbcharlen(read_charset, chr) > 1 &&
|
||||
to + my_mbcharlen(read_charset, chr) <= end_of_buff)
|
||||
{
|
||||
uchar* p= to;
|
||||
int ml, i;
|
||||
*to++ = chr;
|
||||
|
||||
ml= my_mbcharlen(read_charset, chr);
|
||||
|
||||
for (i= 1; i < ml; i++)
|
||||
uint ml= my_mbcharlen(read_charset, chr);
|
||||
if (ml == 0)
|
||||
{
|
||||
chr= GET;
|
||||
if (chr == my_b_EOF)
|
||||
{
|
||||
/*
|
||||
Need to back up the bytes already ready from illformed
|
||||
multi-byte char
|
||||
*/
|
||||
to-= i;
|
||||
goto found_eof;
|
||||
}
|
||||
*to++ = chr;
|
||||
*to= '\0';
|
||||
my_error(ER_INVALID_CHARACTER_STRING, MYF(0),
|
||||
read_charset->csname, buffer);
|
||||
error= true;
|
||||
return 1;
|
||||
}
|
||||
if (my_ismbchar(read_charset,
|
||||
|
||||
if (ml > 1 &&
|
||||
to + ml <= end_of_buff)
|
||||
{
|
||||
uchar* p= to;
|
||||
*to++ = chr;
|
||||
|
||||
for (uint i= 1; i < ml; i++)
|
||||
{
|
||||
chr= GET;
|
||||
if (chr == my_b_EOF)
|
||||
{
|
||||
/*
|
||||
Need to back up the bytes already ready from illformed
|
||||
multi-byte char
|
||||
*/
|
||||
to-= i;
|
||||
goto found_eof;
|
||||
}
|
||||
*to++ = chr;
|
||||
}
|
||||
if (my_ismbchar(read_charset,
|
||||
(const char *)p,
|
||||
(const char *)to))
|
||||
continue;
|
||||
for (i= 0; i < ml; i++)
|
||||
PUSH(*--to);
|
||||
chr= GET;
|
||||
}
|
||||
continue;
|
||||
for (uint i= 0; i < ml; i++)
|
||||
PUSH(*--to);
|
||||
chr= GET;
|
||||
}
|
||||
else if (ml > 1)
|
||||
{
|
||||
// Buffer is too small, exit while loop, and reallocate.
|
||||
PUSH(chr);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
*to++ = (uchar) chr;
|
||||
}
|
||||
@ -1871,7 +1884,15 @@ int READ_INFO::read_value(int delim, String *val)
|
||||
for (chr= GET; my_tospace(chr) != delim && chr != my_b_EOF;)
|
||||
{
|
||||
#ifdef USE_MB
|
||||
if (my_mbcharlen(read_charset, chr) > 1)
|
||||
uint ml= my_mbcharlen(read_charset, chr);
|
||||
if (ml == 0)
|
||||
{
|
||||
chr= my_b_EOF;
|
||||
val->length(0);
|
||||
return chr;
|
||||
}
|
||||
|
||||
if (ml > 1)
|
||||
{
|
||||
DBUG_PRINT("read_xml",("multi byte"));
|
||||
int i, ml= my_mbcharlen(read_charset, chr);
|
||||
|
Reference in New Issue
Block a user