Commit a9e0d277 authored by unknown's avatar unknown
Browse files

Bug#15328 Segmentation fault occured if my.cnf is invalid for escape sequence

 - Check that length of value is longer than 1 before decrementing length by 2.
 - Backport from 5.0, make it possible to use my_print_defaults in tests


mysql-test/mysql-test-run.pl:
  Backport from 5.0, make it possible to use my_print_defaults from tests
mysql-test/mysql-test-run.sh:
  Backport from 5.0, make it possible to use my_print_defaults from tests
mysql-test/r/mysqldump.result:
  Update result
mysql-test/t/mysqldump.test:
  Test that my_print default don't segfault when encountering an option without closing "
mysys/default.c:
  Check that length of value is longer than 1 before deciding to decrement its length by 2.
mysql-test/std_data/bug15328.cnf:
  New BitKeeper file ``mysql-test/std_data/bug15328.cnf''
parent 5854f65b
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -179,6 +179,7 @@ our $exe_mysqlshow; # Called from test case
our $exe_mysql_fix_system_tables;
our $exe_mysqltest;
our $exe_slave_mysqld;
our $exe_my_print_defaults;

our $opt_bench= 0;
our $opt_small_bench= 0;
@@ -893,6 +894,8 @@ sub executable_setup () {
                                           "$path_client_bindir/mysqld-max");
      $path_language=      mtr_path_exists("$glob_basedir/share/english/");
      $path_charsetsdir=   mtr_path_exists("$glob_basedir/share/charsets");
      $exe_my_print_defaults=
	mtr_exe_exists("$path_client_bindir/my_print_defaults");
    }
    else
    {
@@ -900,6 +903,8 @@ sub executable_setup () {
      $exe_mysqld=         mtr_exe_exists ("$glob_basedir/sql/mysqld");
      $path_language=      mtr_path_exists("$glob_basedir/sql/share/english/");
      $path_charsetsdir=   mtr_path_exists("$glob_basedir/sql/share/charsets");
      $exe_my_print_defaults=
	mtr_exe_exists("$glob_basedir/extra/my_print_defaults");
    }

    if ( $glob_use_embedded_server )
@@ -952,6 +957,8 @@ sub executable_setup () {
    $exe_mysql_fix_system_tables=
      mtr_script_exists("$path_client_bindir/mysql_fix_privilege_tables",
			"$glob_basedir/scripts/mysql_fix_privilege_tables");
    $exe_my_print_defaults=
      mtr_exe_exists("$path_client_bindir/my_print_defaults");

    $path_language=      mtr_path_exists("$glob_basedir/share/mysql/english/",
                                         "$glob_basedir/share/english/");
@@ -2303,6 +2310,7 @@ sub run_mysqltest ($) {
  $ENV{'MYSQL_FIX_SYSTEM_TABLES'}=  $cmdline_mysql_fix_system_tables;
  $ENV{'MYSQL_CLIENT_TEST'}=        $cmdline_mysql_client_test;
  $ENV{'CHARSETSDIR'}=              $path_charsetsdir;
  $ENV{'MYSQL_MY_PRINT_DEFAULTS'}=  $exe_my_print_defaults;

  $ENV{'NDB_STATUS_OK'}=            $flag_ndb_status_ok;
  $ENV{'NDB_MGM'}=                  $exe_ndb_mgm;
+3 −1
Original line number Diff line number Diff line
@@ -601,6 +601,7 @@ if [ x$SOURCE_DIST = x1 ] ; then
 CLIENT_BINDIR="$BASEDIR/client"
 MYSQLADMIN="$CLIENT_BINDIR/mysqladmin"
 WAIT_PID="$BASEDIR/extra/mysql_waitpid"
 MYSQL_MY_PRINT_DEFAULTS="$BASEDIR/extra/my_print_defaults"
 MYSQL_MANAGER_CLIENT="$CLIENT_BINDIR/mysqlmanagerc"
 MYSQL_MANAGER="$BASEDIR/tools/mysqlmanager"
 MYSQL_MANAGER_PWGEN="$CLIENT_BINDIR/mysqlmanager-pwgen"
@@ -661,6 +662,7 @@ else
 MYSQL_BINLOG="$CLIENT_BINDIR/mysqlbinlog"
 MYSQLADMIN="$CLIENT_BINDIR/mysqladmin"
 WAIT_PID="$CLIENT_BINDIR/mysql_waitpid"
 MYSQL_MY_PRINT_DEFAULTS="$CLIENT_BINDIR/my_print_defaults"
 MYSQL_MANAGER="$CLIENT_BINDIR/mysqlmanager"
 MYSQL_MANAGER_CLIENT="$CLIENT_BINDIR/mysqlmanagerc"
 MYSQL_MANAGER_PWGEN="$CLIENT_BINDIR/mysqlmanager-pwgen"
@@ -742,7 +744,7 @@ MYSQL_BINLOG="$MYSQL_BINLOG --no-defaults --local-load=$MYSQL_TMP_DIR $EXTRA_MYS
MYSQL_FIX_SYSTEM_TABLES="$MYSQL_FIX_SYSTEM_TABLES --no-defaults --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD --basedir=$BASEDIR --bindir=$CLIENT_BINDIR --verbose"
MYSQL="$MYSQL --no-defaults --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD"
export MYSQL MYSQL_DUMP MYSQL_IMPORT MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES
export CLIENT_BINDIR MYSQL_CLIENT_TEST CHARSETSDIR
export CLIENT_BINDIR MYSQL_CLIENT_TEST CHARSETSDIR MYSQL_MY_PRINT_DEFAULTS
export NDB_TOOLS_DIR
export NDB_MGM
export NDB_BACKUP_DIR
+1 −0
Original line number Diff line number Diff line
@@ -1503,3 +1503,4 @@ select * from t1;
a	b
Osnabrck	Kln
drop table t1;
--fields-optionally-enclosed-by="
+2 −0
Original line number Diff line number Diff line
[mysqldump]
fields-optionally-enclosed-by="
+8 −0
Original line number Diff line number Diff line
@@ -647,4 +647,12 @@ select * from t1;
select * from t1;

drop table t1;

#
# BUG#15328 Segmentation fault occured if my.cnf is invalid for escape sequence
#

--exec $MYSQL_MY_PRINT_DEFAULTS --defaults-extra-file=$MYSQL_TEST_DIR/std_data/bug15328.cnf mysqldump


# End of 4.1 tests
Loading