Commit 5459ebc5 authored by anjuta@arthur.local's avatar anjuta@arthur.local

Fixed Bug#19479:mysqldump creates invalid dump.

Only check for FN_DEVCHAR in filenames if FN_DEVCHAR is defined.
This allows to use table names with ":" on non windows platforms.
On Windows platform get an error if you use table name that contains FN_DEVCHAR
parent 1efda1ea
...@@ -1282,3 +1282,5 @@ extra/yassl/taocrypt/benchmark/benchmark ...@@ -1282,3 +1282,5 @@ extra/yassl/taocrypt/benchmark/benchmark
extra/yassl/taocrypt/test/test extra/yassl/taocrypt/test/test
extra/yassl/testsuite/testsuite extra/yassl/testsuite/testsuite
client/mysql_upgrade client/mysql_upgrade
sql/share/iso639-2.txt
sql/share/fixerrmsg.pl
...@@ -384,6 +384,7 @@ inline double ulonglong2double(ulonglong value) ...@@ -384,6 +384,7 @@ inline double ulonglong2double(ulonglong value)
#define FN_LIBCHAR '\\' #define FN_LIBCHAR '\\'
#define FN_ROOTDIR "\\" #define FN_ROOTDIR "\\"
#define FN_DEVCHAR ':'
#define FN_NETWORK_DRIVES /* Uses \\ to indicate network drives */ #define FN_NETWORK_DRIVES /* Uses \\ to indicate network drives */
#define FN_NO_CASE_SENCE /* Files are not case-sensitive */ #define FN_NO_CASE_SENCE /* Files are not case-sensitive */
#define OS_FILE_LIMIT 2048 #define OS_FILE_LIMIT 2048
......
...@@ -599,7 +599,6 @@ typedef SOCKET_SIZE_TYPE size_socket; ...@@ -599,7 +599,6 @@ typedef SOCKET_SIZE_TYPE size_socket;
#define FN_HOMELIB '~' /* ~/ is used as abbrev for home dir */ #define FN_HOMELIB '~' /* ~/ is used as abbrev for home dir */
#define FN_CURLIB '.' /* ./ is used as abbrev for current dir */ #define FN_CURLIB '.' /* ./ is used as abbrev for current dir */
#define FN_PARENTDIR ".." /* Parent directory; Must be a string */ #define FN_PARENTDIR ".." /* Parent directory; Must be a string */
#define FN_DEVCHAR ':'
#ifndef FN_LIBCHAR #ifndef FN_LIBCHAR
#ifdef __EMX__ #ifdef __EMX__
......
...@@ -773,3 +773,17 @@ Warnings: ...@@ -773,3 +773,17 @@ Warnings:
Warning 1071 Specified key was too long; max key length is 765 bytes Warning 1071 Specified key was too long; max key length is 765 bytes
insert into t1 values('aaa'); insert into t1 values('aaa');
drop table t1; drop table t1;
drop table if exists `about:text`;
create table `about:text` (
_id int not null auto_increment,
`about:text` varchar(255) not null default '',
primary key (_id)
);
show create table `about:text`;
Table Create Table
about:text CREATE TABLE `about:text` (
`_id` int(11) NOT NULL auto_increment,
`about:text` varchar(255) NOT NULL default '',
PRIMARY KEY (`_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table `about:text`;
...@@ -674,4 +674,19 @@ create table t1(f1 varchar(800) binary not null, key(f1)) engine = innodb ...@@ -674,4 +674,19 @@ create table t1(f1 varchar(800) binary not null, key(f1)) engine = innodb
insert into t1 values('aaa'); insert into t1 values('aaa');
drop table t1; drop table t1;
#
# Bug#19479:mysqldump creates invalid dump
#
--disable_warnings
drop table if exists `about:text`;
--enable_warnings
create table `about:text` (
_id int not null auto_increment,
`about:text` varchar(255) not null default '',
primary key (_id)
);
show create table `about:text`;
drop table `about:text`;
# End of 5.0 tests # End of 5.0 tests
...@@ -40,14 +40,14 @@ my_string fn_ext(const char *name) ...@@ -40,14 +40,14 @@ my_string fn_ext(const char *name)
DBUG_ENTER("fn_ext"); DBUG_ENTER("fn_ext");
DBUG_PRINT("mfunkt",("name: '%s'",name)); DBUG_PRINT("mfunkt",("name: '%s'",name));
#if defined(FN_DEVCHAR) || defined(FN_C_AFTER_DIR) #if defined(FN_DEVCHAR) || defined(FN_C_AFTER_DIR) || defined(BASKSLASH_MBTAIL)
{ {
char buff[FN_REFLEN]; char buff[FN_REFLEN];
gpos=(my_string) name+dirname_part(buff,(char*) name); gpos=(my_string) name+dirname_part(buff,(char*) name);
} }
#else #else
if (!(gpos=strrchr(name,FNLIBCHAR))) if (!(gpos= strrchr(name, FN_LIBCHAR)))
gpos=name; gpos= (my_string) name;
#endif #endif
pos=strchr(gpos,FN_EXTCHAR); pos=strchr(gpos,FN_EXTCHAR);
DBUG_RETURN (pos ? pos : strend(gpos)); DBUG_RETURN (pos ? pos : strend(gpos));
......
...@@ -1614,6 +1614,10 @@ bool check_db_name(char *name) ...@@ -1614,6 +1614,10 @@ bool check_db_name(char *name)
if (*name == '/' || *name == '\\' || *name == FN_LIBCHAR || if (*name == '/' || *name == '\\' || *name == FN_LIBCHAR ||
*name == FN_EXTCHAR) *name == FN_EXTCHAR)
return 1; return 1;
#ifdef FN_DEVCHAR
if (*name == FN_DEVCHAR)
return 1;
#endif
name++; name++;
} }
return last_char_is_space || (uint) (name - start) > NAME_LEN; return last_char_is_space || (uint) (name - start) > NAME_LEN;
...@@ -1656,6 +1660,10 @@ bool check_table_name(const char *name, uint length) ...@@ -1656,6 +1660,10 @@ bool check_table_name(const char *name, uint length)
#endif #endif
if (*name == '/' || *name == '\\' || *name == FN_EXTCHAR) if (*name == '/' || *name == '\\' || *name == FN_EXTCHAR)
return 1; return 1;
#ifdef FN_DEVCHAR
if (*name == FN_DEVCHAR)
return 1;
#endif
name++; name++;
} }
#if defined(USE_MB) && defined(USE_MB_IDENT) #if defined(USE_MB) && defined(USE_MB_IDENT)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment