summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2016-03-21 11:54:45 +0100
committerSergei Golubchik <serg@mariadb.org>2016-03-21 11:54:45 +0100
commit98ea8062075f027561488bf0f6c6e3aaf217249e (patch)
tree79d66dc1069035013222bea9cb5ada925291b522
parentb9e571882b3801f53d30bb77155743af39c1b719 (diff)
parent11b77e9b18a8d97063b4c4a96e40bf9c75bd0e8b (diff)
downloadmariadb-git-98ea8062075f027561488bf0f6c6e3aaf217249e.tar.gz
Merge branch '5.5' into 10.0
-rw-r--r--client/mysqlcheck.c1
-rw-r--r--mysql-test/r/events_2.result4
-rw-r--r--mysql-test/suite/sys_vars/t/secure_file_priv.test40
-rw-r--r--mysql-test/t/events_2.test2
-rw-r--r--mysys/lf_alloc-pin.c9
-rw-r--r--sql/gcalc_slicescan.h2
6 files changed, 43 insertions, 15 deletions
diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c
index 3b08c892288..3b374f3975e 100644
--- a/client/mysqlcheck.c
+++ b/client/mysqlcheck.c
@@ -523,7 +523,6 @@ static int is_view(const char *table)
{
fprintf(stderr, "Failed to %s\n", query);
fprintf(stderr, "Error: %s\n", mysql_error(sock));
- my_free(query);
DBUG_RETURN(-1);
}
res= mysql_store_result(sock);
diff --git a/mysql-test/r/events_2.result b/mysql-test/r/events_2.result
index 3b7f3566cab..06075b0e66e 100644
--- a/mysql-test/r/events_2.result
+++ b/mysql-test/r/events_2.result
@@ -1,10 +1,10 @@
drop database if exists events_test;
create database events_test;
use events_test;
-create event e_26 on schedule at '2017-01-01 00:00:00' disable do set @a = 5;
+create event e_26 on schedule at '2027-01-01 00:00:00' disable do set @a = 5;
select db, name, body, definer, convert_tz(execute_at, 'UTC', 'SYSTEM'), on_completion from mysql.event;
db name body definer convert_tz(execute_at, 'UTC', 'SYSTEM') on_completion
-events_test e_26 set @a = 5 root@localhost 2017-01-01 00:00:00 DROP
+events_test e_26 set @a = 5 root@localhost 2027-01-01 00:00:00 DROP
drop event e_26;
create event e_26 on schedule at NULL disable do set @a = 5;
ERROR HY000: Incorrect AT value: 'NULL'
diff --git a/mysql-test/suite/sys_vars/t/secure_file_priv.test b/mysql-test/suite/sys_vars/t/secure_file_priv.test
index 3e2a4fa467a..5c53da58275 100644
--- a/mysql-test/suite/sys_vars/t/secure_file_priv.test
+++ b/mysql-test/suite/sys_vars/t/secure_file_priv.test
@@ -5,17 +5,39 @@ CREATE TABLE t1 (c1 VARCHAR(50));
INSERT INTO t1 VALUES ("one"),("two"),("three"),("four"),("five");
SHOW VARIABLES LIKE 'secure_file_priv';
--disable_query_log
+
# Atempt to create a file where we normally aren't allowed to create one.
+#
# Doing this in a portable manner is difficult but we should be able to
-# count on the depth of the directory hierarchy used. Three steps up from
-# the datadir is the 'mysql_test' directory.
---let $PROTECTED_FILE=`SELECT concat(@@datadir,'/../../../bug50373.txt')`
---eval SELECT * FROM t1 INTO OUTFILE '$PROTECTED_FILE';
-DELETE FROM t1;
---eval LOAD DATA INFILE '$PROTECTED_FILE' INTO TABLE t1;
-SELECT * FROM t1;
---eval SELECT load_file('$PROTECTED_FILE') AS loaded_file;
+# count on the directory hierarchy used. A step up from MYSQLTEST_VARDIR
+# should definitely lead us to a "protected" directory,
+# but at the same time should still be writable since MTR was able
+# to create the vardir itself there.
+# If we run tests normally, it will be mysql-test directory.
+# If we run tests with --mem, it will be /dev/shm.
+# If we run tests with --parallel, it will be mysql-test/var
+# (because MYSQLTEST_VARDIR in this case is mysql-test/var/N).
+
+--perl
+use File::Basename;
+my $protected_file= dirname($ENV{MYSQLTEST_VARDIR}).'/bug50373.txt';
+open(FILE, ">", "$ENV{MYSQL_TMP_DIR}/bug50373.inc") or die;
+print FILE "SELECT * FROM t1 INTO OUTFILE '".$protected_file."';\n";
+print FILE "DELETE FROM t1;\n";
+print FILE "LOAD DATA INFILE '".$protected_file."' INTO TABLE t1;\n";
+print FILE "SELECT * FROM t1;\n";
+print FILE "SELECT load_file('",$protected_file,"') AS loaded_file;\n";
+close(FILE);
+EOF
+
+--source $MYSQL_TMP_DIR/bug50373.inc
+--remove_file $MYSQL_TMP_DIR/bug50373.inc
--enable_query_log
-remove_file $PROTECTED_FILE;
+
DROP TABLE t1;
+--perl
+use File::Basename;
+unlink dirname($ENV{MYSQLTEST_VARDIR}).'/bug50373.txt';
+EOF
+
diff --git a/mysql-test/t/events_2.test b/mysql-test/t/events_2.test
index 3d609654b21..48949d5630b 100644
--- a/mysql-test/t/events_2.test
+++ b/mysql-test/t/events_2.test
@@ -13,7 +13,7 @@ use events_test;
# mysql.event intact checking end
#
-create event e_26 on schedule at '2017-01-01 00:00:00' disable do set @a = 5;
+create event e_26 on schedule at '2027-01-01 00:00:00' disable do set @a = 5;
select db, name, body, definer, convert_tz(execute_at, 'UTC', 'SYSTEM'), on_completion from mysql.event;
drop event e_26;
--error ER_WRONG_VALUE
diff --git a/mysys/lf_alloc-pin.c b/mysys/lf_alloc-pin.c
index b599b455ff5..282433ea48d 100644
--- a/mysys/lf_alloc-pin.c
+++ b/mysys/lf_alloc-pin.c
@@ -103,6 +103,12 @@
#include <my_sys.h>
#include <lf.h>
+/*
+ when using alloca() leave at least that many bytes of the stack -
+ for functions we might be calling from within this stack frame
+*/
+#define ALLOCA_SAFETY_MARGIN 8192
+
#define LF_PINBOX_MAX_PINS 65536
static void _lf_pinbox_real_free(LF_PINS *pins);
@@ -349,7 +355,8 @@ static void _lf_pinbox_real_free(LF_PINS *pins)
{
int alloca_size= sizeof(void *)*LF_PINBOX_PINS*npins;
/* create a sorted list of pinned addresses, to speed up searches */
- if (available_stack_size(&pinbox, *pins->stack_ends_here) > alloca_size)
+ if (available_stack_size(&pinbox, *pins->stack_ends_here) >
+ alloca_size + ALLOCA_SAFETY_MARGIN)
{
struct st_harvester hv;
addr= (void **) alloca(alloca_size);
diff --git a/sql/gcalc_slicescan.h b/sql/gcalc_slicescan.h
index 5a0399bc8da..4996287ca88 100644
--- a/sql/gcalc_slicescan.h
+++ b/sql/gcalc_slicescan.h
@@ -26,7 +26,7 @@
#ifndef GCALC_DBUG_OFF
#define GCALC_DBUG_PRINT(b) DBUG_PRINT("Gcalc", b)
-#define GCALC_DBUG_ENTER(a) DBUG_ENTER("Gcalc "a)
+#define GCALC_DBUG_ENTER(a) DBUG_ENTER("Gcalc " a)
#define GCALC_DBUG_RETURN(r) DBUG_RETURN(r)
#define GCALC_DBUG_VOID_RETURN DBUG_VOID_RETURN
#define GCALC_DBUG_ASSERT(r) DBUG_ASSERT(r)