diff options
author | unknown <gshchepa/uchum@gleb.loc> | 2007-11-19 21:34:21 +0400 |
---|---|---|
committer | unknown <gshchepa/uchum@gleb.loc> | 2007-11-19 21:34:21 +0400 |
commit | ea739898281a86c074275f2f0a084840d7ed3e44 (patch) | |
tree | 9db47a6ebc5ed1c5edd36bbde3240226cfed3a47 | |
parent | ac0612f5599a8a0038dcf4031a85e92b67bac1d0 (diff) | |
download | mariadb-git-ea739898281a86c074275f2f0a084840d7ed3e44.tar.gz |
Fixed bug #32282: TEXT silently truncates when value is exactly 65536
bytes length.
The server has been modified to report warnings on truncation to
65536 bytes as usual.
sql/sql_string.cc:
Fixed bug #32282.
The well_formed_copy_nchars function returned an incorrect value
of copied bytes of the truncated input string: extra length of
the first truncated character added to the *from_end_pos pointer.
That has been fixed.
mysql-test/r/type_blob.result:
Added test case for bug #32282.
mysql-test/t/type_blob.test:
Added test case for bug #32282.
-rw-r--r-- | mysql-test/r/type_blob.result | 14 | ||||
-rw-r--r-- | mysql-test/t/type_blob.test | 11 | ||||
-rw-r--r-- | sql/sql_string.cc | 5 |
3 files changed, 29 insertions, 1 deletions
diff --git a/mysql-test/r/type_blob.result b/mysql-test/r/type_blob.result index c72ee005428..80d233ee16a 100644 --- a/mysql-test/r/type_blob.result +++ b/mysql-test/r/type_blob.result @@ -807,4 +807,18 @@ set @@sql_mode='TRADITIONAL'; create table t1 (a text default ''); ERROR 42000: BLOB/TEXT column 'a' can't have a default value set @@sql_mode=''; +CREATE TABLE t (c TEXT CHARSET ASCII); +INSERT INTO t (c) VALUES (REPEAT('1',65537)); +Warnings: +Warning 1265 Data truncated for column 'c' at row 1 +INSERT INTO t (c) VALUES (REPEAT('2',65536)); +Warnings: +Warning 1265 Data truncated for column 'c' at row 1 +INSERT INTO t (c) VALUES (REPEAT('3',65535)); +SELECT LENGTH(c), CHAR_LENGTH(c) FROM t; +LENGTH(c) CHAR_LENGTH(c) +65535 65535 +65535 65535 +65535 65535 +DROP TABLE t; End of 5.0 tests diff --git a/mysql-test/t/type_blob.test b/mysql-test/t/type_blob.test index ba9f374a24c..d79b749dd65 100644 --- a/mysql-test/t/type_blob.test +++ b/mysql-test/t/type_blob.test @@ -436,4 +436,15 @@ set @@sql_mode='TRADITIONAL'; create table t1 (a text default ''); set @@sql_mode=''; +# +# Bug #32282: TEXT silently truncates when value is exactly 65536 bytes +# + +CREATE TABLE t (c TEXT CHARSET ASCII); +INSERT INTO t (c) VALUES (REPEAT('1',65537)); +INSERT INTO t (c) VALUES (REPEAT('2',65536)); +INSERT INTO t (c) VALUES (REPEAT('3',65535)); +SELECT LENGTH(c), CHAR_LENGTH(c) FROM t; +DROP TABLE t; + --echo End of 5.0 tests diff --git a/sql/sql_string.cc b/sql/sql_string.cc index 9d7df73cd7a..606a9ddb26d 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -858,7 +858,7 @@ outp: with optional left padding (for binary -> UCS2 conversion) SYNOPSIS - well_formed_copy_nhars() + well_formed_copy_nchars() to Store result here to_length Maxinum length of "to" string to_cs Character set of "to" string @@ -997,7 +997,10 @@ outp: goto outp; } else + { + from= from_prev; break; + } } *from_end_pos= from; res= to - to_start; |