Skip to content

Commit ab32113

Browse files
Merge branch 'mysql-5.5' into mysql-5.6
2 parents b7f1955 + c3cf7f4 commit ab32113

File tree

4 files changed

+30
-99
lines changed

4 files changed

+30
-99
lines changed

mysql-test/r/loaddata.result

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ DROP TABLE t1;
507507
# Bug#11765139 58069: LOAD DATA INFILE: VALGRIND REPORTS INVALID MEMORY READS AND WRITES WITH U
508508
#
509509
CREATE TABLE t1(f1 INT);
510-
SELECT 0xE1C330 INTO OUTFILE 't1.dat';
510+
SELECT 0xE1BB30 INTO OUTFILE 't1.dat';
511511
LOAD DATA INFILE 't1.dat' IGNORE INTO TABLE t1 CHARACTER SET utf8;
512512
DROP TABLE t1;
513513
#
@@ -532,27 +532,3 @@ FIELDS TERMINATED BY 't' LINES TERMINATED BY '';
532532
Got one of the listed errors
533533
SET @@sql_mode= @old_mode;
534534
DROP TABLE t1;
535-
536-
#
537-
# Bug#23080148 - Backport of Bug#20683959.
538-
# Bug#20683959 LOAD DATA INFILE IGNORES A SPECIFIC ROW SILENTLY
539-
# UNDER DB CHARSET IS UTF8.
540-
#
541-
CREATE DATABASE d1 CHARSET latin1;
542-
USE d1;
543-
CREATE TABLE t1 (val TEXT);
544-
LOAD DATA INFILE '../../std_data/bug20683959loaddata.txt' INTO TABLE t1;
545-
SELECT COUNT(*) FROM t1;
546-
COUNT(*)
547-
1
548-
SELECT HEX(val) FROM t1;
549-
HEX(val)
550-
C38322525420406E696F757A656368756E3A20E98198E2889AF58081AEE7B99DE4B88AE383A3E7B99DE69690F58087B3E7B9A7EFBDA8E7B99DEFBDB3E7B99DE78999E880B3E7B8BAEFBDAAE7B9A7E89699E296A1E7B8BAE4BBA3EFBD8CE7B8BAEFBDA9E7B8B2E2889AE38184E7B99DEFBDB3E7B99DE4B88AE383A3E7B99DE69690F58087B3E7B9A7EFBDA8E7B99DEFBDB3E7B99DE5B3A8EFBD84E8ABA0EFBDA8E89C89F580948EE599AAE7B8BAEFBDAAE7B8BAE9A198EFBDA9EFBDB1E7B9A7E581B5E289A0E7B8BAEFBDBEE7B9A7E9A194EFBDA9E882B4EFBDA5EFBDB5E980A7F5808B96E28693E99EABE38287E58F99E7B8BAE58AB1E28691E7B8BAF5808B9AE7828AE98095EFBDB1E7B8BAEFBDAFE7B8B2E288ABE6A89FE89EB3E6BA98F58081ADE88EA0EFBDBAE98095E6BA98F58081AEE89D93EFBDBAE8AD9BEFBDACE980A7F5808B96E28693E7B8BAF580918EE288AAE7B8BAE4B88AEFBC9EE7B8BAE4B99DE28691E7B8BAF5808B96EFBCA0E88DB3E6A68AEFBDB9EFBDB3E981B2E5B3A8E296A1E7B8BAE7A4BCE7828AE88DB3E6A68AEFBDB0EFBDBDE7B8BAA0E7B8BAE88B93EFBDBEE5B899EFBC9E
551-
CREATE DATABASE d2 CHARSET utf8;
552-
USE d2;
553-
CREATE TABLE t1 (val TEXT);
554-
LOAD DATA INFILE '../../std_data/bug20683959loaddata.txt' INTO TABLE t1;
555-
ERROR HY000: Invalid utf8 character string: '�"RT @niouzechun: \9058\221A'
556-
DROP TABLE d1.t1, d2.t1;
557-
DROP DATABASE d1;
558-
DROP DATABASE d2;

mysql-test/std_data/bug20683959loaddata.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

mysql-test/t/loaddata.test

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,7 @@ disconnect con1;
610610
--echo #
611611

612612
CREATE TABLE t1(f1 INT);
613-
EVAL SELECT 0xE1C330 INTO OUTFILE 't1.dat';
613+
EVAL SELECT 0xE1BB30 INTO OUTFILE 't1.dat';
614614
--disable_warnings
615615
LOAD DATA INFILE 't1.dat' IGNORE INTO TABLE t1 CHARACTER SET utf8;
616616
--enable_warnings
@@ -656,26 +656,3 @@ SET @@sql_mode= @old_mode;
656656
--remove_file $MYSQLTEST_VARDIR/mysql
657657
DROP TABLE t1;
658658

659-
--echo
660-
--echo #
661-
--echo # Bug#23080148 - Backport of Bug#20683959.
662-
--echo # Bug#20683959 LOAD DATA INFILE IGNORES A SPECIFIC ROW SILENTLY
663-
--echo # UNDER DB CHARSET IS UTF8.
664-
--echo #
665-
666-
CREATE DATABASE d1 CHARSET latin1;
667-
USE d1;
668-
CREATE TABLE t1 (val TEXT);
669-
LOAD DATA INFILE '../../std_data/bug20683959loaddata.txt' INTO TABLE t1;
670-
SELECT COUNT(*) FROM t1;
671-
SELECT HEX(val) FROM t1;
672-
673-
CREATE DATABASE d2 CHARSET utf8;
674-
USE d2;
675-
CREATE TABLE t1 (val TEXT);
676-
--error ER_INVALID_CHARACTER_STRING
677-
LOAD DATA INFILE '../../std_data/bug20683959loaddata.txt' INTO TABLE t1;
678-
679-
DROP TABLE d1.t1, d2.t1;
680-
DROP DATABASE d1;
681-
DROP DATABASE d2;

sql/sql_load.cc

Lines changed: 28 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1413,8 +1413,8 @@ READ_INFO::READ_INFO(File file_par, uint tot_length, const CHARSET_INFO *cs,
14131413
set_if_bigger(length,line_start.length());
14141414
stack=stack_pos=(int*) sql_alloc(sizeof(int)*length);
14151415

1416-
if (!(buffer=(uchar*) my_malloc(buff_length+1,MYF(MY_WME))))
1417-
error= true; /* purecov: inspected */
1416+
if (!(buffer=(uchar*) my_malloc(buff_length+1,MYF(0))))
1417+
error=1; /* purecov: inspected */
14181418
else
14191419
{
14201420
end_of_buff=buffer+buff_length;
@@ -1607,50 +1607,37 @@ int READ_INFO::read_field()
16071607
}
16081608
}
16091609
#ifdef USE_MB
1610-
uint ml= my_mbcharlen(read_charset, chr);
1611-
if (ml == 0)
1612-
{
1613-
*to= '\0';
1614-
my_error(ER_INVALID_CHARACTER_STRING, MYF(0),
1615-
read_charset->csname, buffer);
1616-
error= true;
1617-
return 1;
1618-
}
1610+
if (my_mbcharlen(read_charset, chr) > 1 &&
1611+
to + my_mbcharlen(read_charset, chr) <= end_of_buff)
1612+
{
1613+
uchar* p= to;
1614+
int ml, i;
1615+
*to++ = chr;
16191616

1620-
if (ml > 1 &&
1621-
to + ml <= end_of_buff)
1622-
{
1623-
uchar* p= to;
1624-
*to++ = chr;
1617+
ml= my_mbcharlen(read_charset, chr);
16251618

1626-
for (uint i= 1; i < ml; i++)
1619+
for (i= 1; i < ml; i++)
1620+
{
1621+
chr= GET;
1622+
if (chr == my_b_EOF)
16271623
{
1628-
chr= GET;
1629-
if (chr == my_b_EOF)
1630-
{
1631-
/*
1632-
Need to back up the bytes already ready from illformed
1633-
multi-byte char
1634-
*/
1635-
to-= i;
1636-
goto found_eof;
1637-
}
1638-
*to++ = chr;
1624+
/*
1625+
Need to back up the bytes already ready from illformed
1626+
multi-byte char
1627+
*/
1628+
to-= i;
1629+
goto found_eof;
16391630
}
1640-
if (my_ismbchar(read_charset,
1631+
*to++ = chr;
1632+
}
1633+
if (my_ismbchar(read_charset,
16411634
(const char *)p,
16421635
(const char *)to))
1643-
continue;
1644-
for (uint i= 0; i < ml; i++)
1645-
PUSH(*--to);
1646-
chr= GET;
1647-
}
1648-
else if (ml > 1)
1649-
{
1650-
// Buffer is too small, exit while loop, and reallocate.
1651-
PUSH(chr);
1652-
break;
1653-
}
1636+
continue;
1637+
for (i= 0; i < ml; i++)
1638+
PUSH(*--to);
1639+
chr= GET;
1640+
}
16541641
#endif
16551642
*to++ = (uchar) chr;
16561643
}
@@ -1899,15 +1886,7 @@ int READ_INFO::read_value(int delim, String *val)
18991886
for (chr= GET; my_tospace(chr) != delim && chr != my_b_EOF;)
19001887
{
19011888
#ifdef USE_MB
1902-
uint ml= my_mbcharlen(read_charset, chr);
1903-
if (ml == 0)
1904-
{
1905-
chr= my_b_EOF;
1906-
val->length(0);
1907-
return chr;
1908-
}
1909-
1910-
if (ml > 1)
1889+
if (my_mbcharlen(read_charset, chr) > 1)
19111890
{
19121891
DBUG_PRINT("read_xml",("multi byte"));
19131892
int i, ml= my_mbcharlen(read_charset, chr);

0 commit comments

Comments
 (0)