Commit 6e6d6073 authored by unknown's avatar unknown

Bug #36041: mysql-test-run doesn't seem to string match

  100% effectively on Windows

The mysqltest docs state that the 'replace_result' command
doesn't perform any escape processing.
However the current implementation was processing backslash 
escapes in the from/to strings.
This prevents replacing e.g. patch on windows (where backslash
is used as a path separator).
Fixed by removing the backslash escape processing from 
'replace_result'.


client/mysqltest.c:
  Bug #36041: remove the escape processing from --replace_result
mysql-test/r/mysqltest.result:
  Bug #36041: test case
mysql-test/t/mysqltest.test:
  Bug #36041: test case
parent 2ea403e1
...@@ -8094,8 +8094,6 @@ uint replace_len(char * str) ...@@ -8094,8 +8094,6 @@ uint replace_len(char * str)
uint len=0; uint len=0;
while (*str) while (*str)
{ {
if (str[0] == '\\' && str[1])
str++;
str++; str++;
len++; len++;
} }
...@@ -8194,35 +8192,7 @@ REPLACE *init_replace(char * *from, char * *to,uint count, ...@@ -8194,35 +8192,7 @@ REPLACE *init_replace(char * *from, char * *to,uint count,
} }
for (pos=from[i], len=0; *pos ; pos++) for (pos=from[i], len=0; *pos ; pos++)
{ {
if (*pos == '\\' && *(pos+1)) follow_ptr->chr= (uchar) *pos;
{
pos++;
switch (*pos) {
case 'b':
follow_ptr->chr = SPACE_CHAR;
break;
case '^':
follow_ptr->chr = START_OF_LINE;
break;
case '$':
follow_ptr->chr = END_OF_LINE;
break;
case 'r':
follow_ptr->chr = '\r';
break;
case 't':
follow_ptr->chr = '\t';
break;
case 'v':
follow_ptr->chr = '\v';
break;
default:
follow_ptr->chr = (uchar) *pos;
break;
}
}
else
follow_ptr->chr= (uchar) *pos;
follow_ptr->table_offset=i; follow_ptr->table_offset=i;
follow_ptr->len= ++len; follow_ptr->len= ++len;
follow_ptr++; follow_ptr++;
......
...@@ -725,4 +725,7 @@ drop table t1; ...@@ -725,4 +725,7 @@ drop table t1;
mysqltest: At line 1: change user failed: Unknown database 'inexistent' mysqltest: At line 1: change user failed: Unknown database 'inexistent'
mysqltest: At line 1: change user failed: Access denied for user 'inexistent'@'localhost' (using password: NO) mysqltest: At line 1: change user failed: Access denied for user 'inexistent'@'localhost' (using password: NO)
mysqltest: At line 1: change user failed: Access denied for user 'root'@'localhost' (using password: YES) mysqltest: At line 1: change user failed: Access denied for user 'root'@'localhost' (using password: YES)
SELECT 'c:\\a.txt' AS col;
col
z
End of tests End of tests
...@@ -2123,6 +2123,13 @@ rmdir $MYSQLTEST_VARDIR/tmp/testdir; ...@@ -2123,6 +2123,13 @@ rmdir $MYSQLTEST_VARDIR/tmp/testdir;
remove_file $MYSQLTEST_VARDIR/tmp/testdir/file1.txt; remove_file $MYSQLTEST_VARDIR/tmp/testdir/file1.txt;
rmdir $MYSQLTEST_VARDIR/tmp/testdir; rmdir $MYSQLTEST_VARDIR/tmp/testdir;
#
# Bug #36041: mysql-test-run doesn't seem to string match 100% effectively
# on Windows
#
--replace_result c:\\a.txt z
SELECT 'c:\\a.txt' AS col;
--echo End of tests --echo End of tests
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