summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2018-03-20 19:25:08 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2018-03-20 19:25:08 +0200
commit613be24b7a53310ae6b250e5ca11fdd3673a531e (patch)
tree75291533f09ca50fe026604f358c60180d510d10
parente0a0fe7d8124b9f395a6c97f538693e729a0b043 (diff)
parent04921000594dcbdf23340850b9284fd30ccdb0fd (diff)
downloadmariadb-git-613be24b7a53310ae6b250e5ca11fdd3673a531e.tar.gz
Merge 10.0 into 10.1
-rw-r--r--extra/yassl/src/handshake.cpp10
-rw-r--r--include/my_valgrind.h2
-rw-r--r--mysql-test/r/having.result14
-rw-r--r--mysql-test/t/having.test18
-rw-r--r--storage/innobase/mem/mem0mem.cc5
-rw-r--r--storage/xtradb/mem/mem0mem.cc5
6 files changed, 54 insertions, 0 deletions
diff --git a/extra/yassl/src/handshake.cpp b/extra/yassl/src/handshake.cpp
index 407e4092ccc..6e181a997bd 100644
--- a/extra/yassl/src/handshake.cpp
+++ b/extra/yassl/src/handshake.cpp
@@ -788,6 +788,16 @@ int DoProcessReply(SSL& ssl)
needHdr = true;
else {
buffer >> hdr;
+ /*
+ According to RFC 4346 (see "7.4.1.3. Server Hello"), the Server Hello
+ packet needs to specify the highest supported TLS version, but not
+ higher than what client requests. YaSSL highest supported version is
+ TLSv1.1 (=3.2) - if the client requests a higher version, downgrade it
+ here to 3.2.
+ See also Appendix E of RFC 5246 (TLS 1.2)
+ */
+ if (hdr.version_.major_ == 3 && hdr.version_.minor_ > 2)
+ hdr.version_.minor_ = 2;
ssl.verifyState(hdr);
}
diff --git a/include/my_valgrind.h b/include/my_valgrind.h
index e3aa11ee355..c488aaf1052 100644
--- a/include/my_valgrind.h
+++ b/include/my_valgrind.h
@@ -35,6 +35,8 @@
# define MEM_CHECK_DEFINED(a,len) VALGRIND_CHECK_MEM_IS_DEFINED(a,len)
#elif defined(__SANITIZE_ADDRESS__)
# include <sanitizer/asan_interface.h>
+/* How to do manual poisoning:
+https://github.com/google/sanitizers/wiki/AddressSanitizerManualPoisoning */
# define MEM_UNDEFINED(a,len) ASAN_UNPOISON_MEMORY_REGION(a,len)
# define MEM_NOACCESS(a,len) ASAN_POISON_MEMORY_REGION(a,len)
# define MEM_CHECK_ADDRESSABLE(a,len) ((void) 0)
diff --git a/mysql-test/r/having.result b/mysql-test/r/having.result
index f7503597d32..3845f119528 100644
--- a/mysql-test/r/having.result
+++ b/mysql-test/r/having.result
@@ -723,6 +723,20 @@ SELECT * FROM t1 JOIN t2 ON c1 = c2 HAVING c2 > 'a' ORDER BY c2 LIMIT 1;
c1 c2
x x
DROP TABLE t1,t2;
+#
+# MDEV-6736: Valgrind warnings 'Invalid read' in subselect_engine::calc_const_tables with SQ
+# in WHERE and HAVING, ORDER BY, materialization+semijoin
+#
+CREATE TABLE t1 (a INT) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (3),(8);
+CREATE TABLE t2 (b INT) ENGINE=MyISAM;
+INSERT INTO t2 VALUES (2),(1);
+SELECT a FROM t1
+WHERE 9 IN ( SELECT MIN( a ) FROM t1 )
+HAVING a <> ( SELECT COUNT(*) FROM t2 )
+ORDER BY a;
+a
+DROP TABLE t1,t2;
End of 10.0 tests
#
# MDEV-10716: Assertion `real_type() != FIELD_ITEM' failed in
diff --git a/mysql-test/t/having.test b/mysql-test/t/having.test
index 1bbde3e7c5e..dadeaca35b6 100644
--- a/mysql-test/t/having.test
+++ b/mysql-test/t/having.test
@@ -759,6 +759,24 @@ SELECT * FROM t1 JOIN t2 ON c1 = c2 HAVING c2 > 'a' ORDER BY c2 LIMIT 1;
DROP TABLE t1,t2;
+--echo #
+--echo # MDEV-6736: Valgrind warnings 'Invalid read' in subselect_engine::calc_const_tables with SQ
+--echo # in WHERE and HAVING, ORDER BY, materialization+semijoin
+--echo #
+
+CREATE TABLE t1 (a INT) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (3),(8);
+
+CREATE TABLE t2 (b INT) ENGINE=MyISAM;
+INSERT INTO t2 VALUES (2),(1);
+
+SELECT a FROM t1
+WHERE 9 IN ( SELECT MIN( a ) FROM t1 )
+HAVING a <> ( SELECT COUNT(*) FROM t2 )
+ORDER BY a;
+
+DROP TABLE t1,t2;
+
--echo End of 10.0 tests
--echo #
diff --git a/storage/innobase/mem/mem0mem.cc b/storage/innobase/mem/mem0mem.cc
index b9f190509ee..f91126697fc 100644
--- a/storage/innobase/mem/mem0mem.cc
+++ b/storage/innobase/mem/mem0mem.cc
@@ -406,6 +406,11 @@ mem_heap_create_block_func(
heap->total_size += len;
}
+ /* Poison all available memory. Individual chunks will be unpoisoned on
+ every mem_heap_alloc() call. */
+ compile_time_assert(MEM_BLOCK_HEADER_SIZE >= sizeof *block);
+ UNIV_MEM_FREE(block + 1, len - sizeof *block);
+
ut_ad((ulint)MEM_BLOCK_HEADER_SIZE < len);
return(block);
diff --git a/storage/xtradb/mem/mem0mem.cc b/storage/xtradb/mem/mem0mem.cc
index b9f190509ee..f91126697fc 100644
--- a/storage/xtradb/mem/mem0mem.cc
+++ b/storage/xtradb/mem/mem0mem.cc
@@ -406,6 +406,11 @@ mem_heap_create_block_func(
heap->total_size += len;
}
+ /* Poison all available memory. Individual chunks will be unpoisoned on
+ every mem_heap_alloc() call. */
+ compile_time_assert(MEM_BLOCK_HEADER_SIZE >= sizeof *block);
+ UNIV_MEM_FREE(block + 1, len - sizeof *block);
+
ut_ad((ulint)MEM_BLOCK_HEADER_SIZE < len);
return(block);