summaryrefslogtreecommitdiff
path: root/sql/sql_load.cc
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2016-12-22 12:49:06 +0100
committerSergei Golubchik <serg@mariadb.org>2016-12-22 12:49:06 +0100
commit9fefe973360124f281122a129434a36e661168b9 (patch)
treed4028e2d680914e2a0c233fc4ea287ba0cbaeba0 /sql/sql_load.cc
parent8fcdd6b0ecbb966f4479856efe93a963a7a422f7 (diff)
parentc8f0eeb9c8596be83fefb7fef9f9871e53edb020 (diff)
downloadmariadb-git-9fefe973360124f281122a129434a36e661168b9.tar.gz
Merge branch 'mysql/5.5' into 5.5
Diffstat (limited to 'sql/sql_load.cc')
-rw-r--r--sql/sql_load.cc77
1 files changed, 28 insertions, 49 deletions
diff --git a/sql/sql_load.cc b/sql/sql_load.cc
index 9f300f803de..4723c2b643d 100644
--- a/sql/sql_load.cc
+++ b/sql/sql_load.cc
@@ -1389,8 +1389,8 @@ 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_WME))))
- error= true; /* purecov: inspected */
+ if (!(buffer=(uchar*) my_malloc(buff_length+1,MYF(0))))
+ error=1; /* purecov: inspected */
else
{
end_of_buff=buffer+buff_length;
@@ -1581,50 +1581,37 @@ int READ_INFO::read_field()
}
}
#ifdef USE_MB
- uint ml= my_mbcharlen(read_charset, chr);
- if (ml == 0)
- {
- *to= '\0';
- my_error(ER_INVALID_CHARACTER_STRING, MYF(0),
- read_charset->csname, buffer);
- error= true;
- return 1;
- }
+ if (my_mbcharlen(read_charset, chr) > 1 &&
+ to + my_mbcharlen(read_charset, chr) <= end_of_buff)
+ {
+ uchar* p= to;
+ int ml, i;
+ *to++ = chr;
- if (ml > 1 &&
- to + ml <= end_of_buff)
- {
- uchar* p= to;
- *to++ = chr;
+ ml= my_mbcharlen(read_charset, chr);
- for (uint i= 1; i < ml; i++)
+ for (i= 1; i < ml; i++)
+ {
+ chr= GET;
+ if (chr == my_b_EOF)
{
- 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;
+ /*
+ Need to back up the bytes already ready from illformed
+ multi-byte char
+ */
+ to-= i;
+ goto found_eof;
}
- if (my_ismbchar(read_charset,
+ *to++ = chr;
+ }
+ if (my_ismbchar(read_charset,
(const char *)p,
(const char *)to))
- 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;
- }
+ continue;
+ for (i= 0; i < ml; i++)
+ PUSH(*--to);
+ chr= GET;
+ }
#endif
*to++ = (uchar) chr;
}
@@ -1868,15 +1855,7 @@ int READ_INFO::read_value(int delim, String *val)
for (chr= GET; my_tospace(chr) != delim && chr != my_b_EOF;)
{
#ifdef USE_MB
- uint ml= my_mbcharlen(read_charset, chr);
- if (ml == 0)
- {
- chr= my_b_EOF;
- val->length(0);
- return chr;
- }
-
- if (ml > 1)
+ if (my_mbcharlen(read_charset, chr) > 1)
{
DBUG_PRINT("read_xml",("multi byte"));
int i, ml= my_mbcharlen(read_charset, chr);