From ea3afa8d1e1325e621246a17fce30ddd24e74da2 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 5 Apr 2007 20:26:18 +0500 Subject: [PATCH] bug #26074 Mysql crash creating partition As we have unified paths inside partition engine, we should look for '/' as a path separator mysql-test/r/windows.result: result fixed mysql-test/t/windows.test: testcase sql/ha_partition.cc: check for '/' instead of FN_LIBCHAR --- mysql-test/r/windows.result | 15 +++++++++++++++ mysql-test/t/windows.test | 21 +++++++++++++++++++++ sql/ha_partition.cc | 3 ++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/windows.result b/mysql-test/r/windows.result index 7472b724f47..423123692e5 100644 --- a/mysql-test/r/windows.result +++ b/mysql-test/r/windows.result @@ -26,3 +26,18 @@ ERROR HY000: No paths allowed for shared library execute abc; ERROR HY000: No paths allowed for shared library deallocate prepare abc; +CREATE TABLE t1 ( +`pkid` int(11) NOT NULL AUTO_INCREMENT, +`SALES_DATE` date NOT NULL DEFAULT '0000-00-00', +KEY `pkid` (`pkid`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +PARTITION BY RANGE (MONTH(SALES_DATE)) +( +PARTITION p0 VALUES LESS THAN (2) ENGINE=INNODB +data DIRECTORY='c:/tmp/' + index DIRECTORY = 'c:/tmp/', +PARTITION p1 VALUES LESS THAN (3) ENGINE=INNODB +data DIRECTORY='c:/tmp/' + index DIRECTORY = 'c:/tmp/' +); +drop table t1; diff --git a/mysql-test/t/windows.test b/mysql-test/t/windows.test index a10d54b5452..efdf0963b80 100644 --- a/mysql-test/t/windows.test +++ b/mysql-test/t/windows.test @@ -1,5 +1,6 @@ # Windows-specific tests --source include/windows.inc +-- source include/have_innodb.inc # # Bug 9148: Denial of service @@ -49,3 +50,23 @@ execute abc; execute abc; deallocate prepare abc; +# +# Bug #26074 Mysql crash when creating partitions +# + +CREATE TABLE t1 ( + `pkid` int(11) NOT NULL AUTO_INCREMENT, + `SALES_DATE` date NOT NULL DEFAULT '0000-00-00', + KEY `pkid` (`pkid`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +PARTITION BY RANGE (MONTH(SALES_DATE)) +( + PARTITION p0 VALUES LESS THAN (2) ENGINE=INNODB + data DIRECTORY='c:/tmp/' + index DIRECTORY = 'c:/tmp/', + PARTITION p1 VALUES LESS THAN (3) ENGINE=INNODB + data DIRECTORY='c:/tmp/' + index DIRECTORY = 'c:/tmp/' +); + +DROP TABLE t1; diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index d3979fa0718..3c25dcd202f 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -1781,7 +1781,8 @@ int ha_partition::set_up_table_before_create(TABLE *table, } table->s->max_rows= part_elem->part_max_rows; table->s->min_rows= part_elem->part_min_rows; - partition_name= strrchr(partition_name_with_path, FN_LIBCHAR); + /* Here we have unified path so should always look for '/', not FN_LIBCHAR */ + partition_name= strrchr(partition_name_with_path, '/'); if ((part_elem->index_file_name && (error= append_file_to_dir(thd, (const char**)&part_elem->index_file_name,