Commit 0e50b924 authored by Alexey Botchkov's avatar Alexey Botchkov

MDEV-9969 mysql_install_db error processing ignore_db_dirs.

        Check for same directories in the list added.
parent 732e2694
...@@ -5,4 +5,5 @@ Test non-numeric value passed to number option. ...@@ -5,4 +5,5 @@ Test non-numeric value passed to number option.
Test that bad value for plugin enum option is rejected correctly. Test that bad value for plugin enum option is rejected correctly.
Test that --help --verbose works Test that --help --verbose works
Test that --not-known-option --help --verbose gives error Test that --not-known-option --help --verbose gives error
Test that specifying same directory several times handled properly.
Done. Done.
...@@ -56,4 +56,12 @@ mkdir $MYSQLTEST_VARDIR/tmp/mysqld_option_err; ...@@ -56,4 +56,12 @@ mkdir $MYSQLTEST_VARDIR/tmp/mysqld_option_err;
--error 2 --error 2
--exec $MYSQLD_BOOTSTRAP_CMD --not-known-option --help --verbose >>$MYSQLTEST_VARDIR/tmp/mysqld_option_err/mysqltest.log 2>&1 --exec $MYSQLD_BOOTSTRAP_CMD --not-known-option --help --verbose >>$MYSQLTEST_VARDIR/tmp/mysqld_option_err/mysqltest.log 2>&1
#
# MDEV-9969 mysql_install_db error processing ignore_db_dirs.
#
--echo Test that specifying same directory several times handled properly.
--exec echo "" | $MYSQLD_BOOTSTRAP_CMD --skip-networking --datadir=$MYSQLTEST_VARDIR/tmp/mysqld_option_err --skip-grant-tables --ignore-db-dirs='some_dir' --ignore-db-dirs='some_dir' >>$MYSQLTEST_VARDIR/tmp/mysqld_option_err/mysqltest.log 2>&1
--echo Done. --echo Done.
...@@ -720,12 +720,24 @@ ignore_db_dirs_process_additions() ...@@ -720,12 +720,24 @@ ignore_db_dirs_process_additions()
for (i= 0; i < ignore_db_dirs_array.elements; i++) for (i= 0; i < ignore_db_dirs_array.elements; i++)
{ {
get_dynamic(&ignore_db_dirs_array, (uchar *) &dir, i); get_dynamic(&ignore_db_dirs_array, (uchar *) &dir, i);
if (my_hash_insert(&ignore_db_dirs_hash, (uchar *) dir)) if (my_hash_insert(&ignore_db_dirs_hash, (uchar *)dir))
{
/* ignore duplicates from the config file */
if (my_hash_search(&ignore_db_dirs_hash, (uchar *)dir->str, dir->length))
{
sql_print_warning("Duplicate ignore-db-dir directory name '%.*s' "
"found in the config file(s). Ignoring the duplicate.",
(int) dir->length, dir->str);
my_free(dir);
goto continue_loop;
}
return true; return true;
}
ptr= strnmov(ptr, dir->str, dir->length); ptr= strnmov(ptr, dir->str, dir->length);
if (i + 1 < ignore_db_dirs_array.elements) *(ptr++)= ',';
ptr= strmov(ptr, ",");
continue_loop:
/* /*
Set the transferred array element to NULL to avoid double free Set the transferred array element to NULL to avoid double free
in case of error. in case of error.
...@@ -734,6 +746,12 @@ ignore_db_dirs_process_additions() ...@@ -734,6 +746,12 @@ ignore_db_dirs_process_additions()
set_dynamic(&ignore_db_dirs_array, (uchar *) &dir, i); set_dynamic(&ignore_db_dirs_array, (uchar *) &dir, i);
} }
if (ptr > opt_ignore_db_dirs)
{
ptr--;
DBUG_ASSERT(*ptr == ',');
}
/* make sure the string is terminated */ /* make sure the string is terminated */
DBUG_ASSERT(ptr - opt_ignore_db_dirs <= (ptrdiff_t) len); DBUG_ASSERT(ptr - opt_ignore_db_dirs <= (ptrdiff_t) len);
*ptr= 0; *ptr= 0;
......
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