diff options
author | Alexander Barkov <bar@mariadb.com> | 2018-10-31 14:25:26 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2018-10-31 14:25:26 +0400 |
commit | 75ceb6ff130cdac67fadc1d45cd64578a19b4835 (patch) | |
tree | 6364705fb91cb327fed6d53053b43f85ec22ac54 | |
parent | 09e97299ba893b7578cac8160b3b687b0594aeee (diff) | |
download | mariadb-git-75ceb6ff130cdac67fadc1d45cd64578a19b4835.tar.gz |
MDEV-17298 ASAN unknown-crash / READ of size 1 in my_strntoul_8bit upon INSERT .. SELECT
-rw-r--r-- | mysql-test/r/ctype_latin1.result | 9 | ||||
-rw-r--r-- | mysql-test/t/ctype_latin1.test | 12 | ||||
-rw-r--r-- | strings/ctype-simple.c | 4 |
3 files changed, 23 insertions, 2 deletions
diff --git a/mysql-test/r/ctype_latin1.result b/mysql-test/r/ctype_latin1.result index 8913c8082c8..d2e4cc31097 100644 --- a/mysql-test/r/ctype_latin1.result +++ b/mysql-test/r/ctype_latin1.result @@ -7963,5 +7963,14 @@ ABCDEFGHI-ABCDEFGHI DROP TABLE t1; SET optimizer_switch=@save_optimizer_switch; # +# MDEV-17298 ASAN unknown-crash / READ of size 1 in my_strntoul_8bit upon INSERT .. SELECT +# +SET NAMES latin1; +CREATE TABLE t1 (a CHAR); +CREATE TABLE t2 (b ENUM('foo','bar')); +INSERT INTO t1 VALUES ('1'); +INSERT INTO t2 SELECT * FROM t1; +DROP TABLE t1, t2; +# # End of 10.0 tests # diff --git a/mysql-test/t/ctype_latin1.test b/mysql-test/t/ctype_latin1.test index da4d76ee2cf..0ec983b8b74 100644 --- a/mysql-test/t/ctype_latin1.test +++ b/mysql-test/t/ctype_latin1.test @@ -265,5 +265,17 @@ SET NAMES latin1; --echo # +--echo # MDEV-17298 ASAN unknown-crash / READ of size 1 in my_strntoul_8bit upon INSERT .. SELECT +--echo # + +SET NAMES latin1; +CREATE TABLE t1 (a CHAR); +CREATE TABLE t2 (b ENUM('foo','bar')); +INSERT INTO t1 VALUES ('1'); +INSERT INTO t2 SELECT * FROM t1; +DROP TABLE t1, t2; + + +--echo # --echo # End of 10.0 tests --echo # diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c index 61b14b84820..8d12c05db18 100644 --- a/strings/ctype-simple.c +++ b/strings/ctype-simple.c @@ -454,7 +454,6 @@ ulong my_strntoul_8bit(CHARSET_INFO *cs, register uint cutlim; register uint32 i; register const char *s; - register uchar c; const char *save, *e; int overflow; @@ -489,8 +488,9 @@ ulong my_strntoul_8bit(CHARSET_INFO *cs, overflow = 0; i = 0; - for (c = *s; s != e; c = *++s) + for ( ; s != e; ++s) { + register uchar c= *s; if (c>='0' && c<='9') c -= '0'; else if (c>='A' && c<='Z') |