Merge 10.1 into 10.2

This commit is contained in:
Marko Mäkelä 2019-03-06 15:15:59 +02:00
commit c155946c90
23 changed files with 144 additions and 107 deletions

View File

@ -513,7 +513,8 @@ datafile_open(const char *file, datafile_cur_t *cursor, uint thread_n)
5.6+. We want to make "local" copies for the backup. */
strncpy(cursor->rel_path,
xb_get_relative_path(cursor->abs_path, FALSE),
sizeof(cursor->rel_path));
(sizeof cursor->rel_path) - 1);
cursor->rel_path[(sizeof cursor->rel_path) - 1] = '\0';
cursor->file = os_file_create_simple_no_error_handling(
0, cursor->abs_path,
@ -646,8 +647,7 @@ mkdirp(const char *pathname, int Flags, myf MyFlags)
/* make a parent directory path */
if (!(parent= (char *)malloc(len)))
return(-1);
strncpy(parent, pathname, len);
parent[len-1]= 0;
memcpy(parent, pathname, len);
for (p = parent + strlen(parent);
!is_path_separator(*p) && p != parent; p--) ;

View File

@ -107,7 +107,8 @@ void encryption_plugin_backup_init(MYSQL *mysql)
/* Required to load the plugin later.*/
add_to_plugin_load_list(plugin_load.c_str());
strncpy(opt_plugin_dir, dir, FN_REFLEN);
strncpy(opt_plugin_dir, dir, FN_REFLEN - 1);
opt_plugin_dir[FN_REFLEN - 1] = '\0';
oss << "plugin_dir=" << '"' << dir << '"' << std::endl;
@ -177,7 +178,10 @@ void encryption_plugin_prepare_init(int argc, char **argv)
add_to_plugin_load_list(plugin_load.c_str());
if (xb_plugin_dir)
strncpy(opt_plugin_dir, xb_plugin_dir, FN_REFLEN);
{
strncpy(opt_plugin_dir, xb_plugin_dir, FN_REFLEN - 1);
opt_plugin_dir[FN_REFLEN - 1] = '\0';
}
char **new_argv = new char *[argc + 1];
new_argv[0] = XTRABACKUP_EXE;

View File

@ -148,7 +148,8 @@ xb_fil_cur_open(
cursor->space_id = node->space->id;
strncpy(cursor->abs_path, node->name, sizeof(cursor->abs_path));
strncpy(cursor->abs_path, node->name, (sizeof cursor->abs_path) - 1);
cursor->abs_path[(sizeof cursor->abs_path) - 1] = '\0';
/* Get the relative path for the destination tablespace name, i.e. the
one that can be appended to the backup root directory. Non-system
@ -156,7 +157,8 @@ xb_fil_cur_open(
We want to make "local" copies for the backup. */
strncpy(cursor->rel_path,
xb_get_relative_path(cursor->abs_path, cursor->is_system()),
sizeof(cursor->rel_path));
(sizeof cursor->rel_path) - 1);
cursor->rel_path[(sizeof cursor->rel_path) - 1] = '\0';
/* In the backup mode we should already have a tablespace handle created
by fil_ibd_load() unless it is a system

View File

@ -2408,8 +2408,9 @@ check_if_skip_table(
return(FALSE);
}
strncpy(buf, dbname, FN_REFLEN);
buf[tbname - 1 - dbname] = 0;
strncpy(buf, dbname, FN_REFLEN - 1);
buf[FN_REFLEN - 1] = '\0';
buf[tbname - 1 - dbname] = '\0';
const skip_database_check_result skip_database =
check_if_skip_database(buf);
@ -2417,7 +2418,6 @@ check_if_skip_table(
return (TRUE);
}
buf[FN_REFLEN - 1] = '\0';
buf[tbname - 1 - dbname] = '.';
/* Check if there's a suffix in the table name. If so, truncate it. We
@ -4888,7 +4888,8 @@ xtrabackup_apply_delta(
}
dst_path[strlen(dst_path) - 6] = '\0';
strncpy(space_name, filename, FN_REFLEN);
strncpy(space_name, filename, FN_REFLEN - 1);
space_name[FN_REFLEN - 1] = '\0';
space_name[strlen(space_name) - 6] = 0;
if (!get_meta_path(src_path, meta_path)) {

View File

@ -7,3 +7,12 @@ DROP TABLE t1;
CREATE TABLE t1(a VARCHAR(2) CHARACTER SET big5 COLLATE big5_chinese_ci,
FULLTEXT(a)) ENGINE=<default_engine>;
DROP TABLE t1;
CREATE TABLE t1 (a SERIAL, t TEXT, FULLTEXT f1(t), FULLTEXT f2(t)) ENGINE=InnoDB;
Warnings:
Note 1831 Duplicate index `f2`. This is deprecated and will be disallowed in a future release
INSERT INTO t1 (a,t) VALUES (1,'1'),(2,'1');
ALTER TABLE t1 ADD COLUMN g TEXT GENERATED ALWAYS AS (t) VIRTUAL;
DELETE FROM t1 WHERE a = 1;
ALTER TABLE t1 DROP INDEX f1;
INSERT INTO t1 (a,t) VALUES (1,'1');
DROP TABLE t1;

View File

@ -35,3 +35,12 @@ FULLTEXT(a)) ENGINE=$default_engine;
DROP TABLE t1;
# End of 5.1 tests
CREATE TABLE t1 (a SERIAL, t TEXT, FULLTEXT f1(t), FULLTEXT f2(t)) ENGINE=InnoDB;
INSERT INTO t1 (a,t) VALUES (1,'1'),(2,'1');
ALTER TABLE t1 ADD COLUMN g TEXT GENERATED ALWAYS AS (t) VIRTUAL;
DELETE FROM t1 WHERE a = 1;
ALTER TABLE t1 DROP INDEX f1;
INSERT INTO t1 (a,t) VALUES (1,'1');
DROP TABLE t1;

View File

@ -2420,6 +2420,11 @@ com_multi_end:
thd->packet.shrink(thd->variables.net_buffer_length); // Reclaim some memory
}
thd->reset_kill_query(); /* Ensure that killed_errmsg is released */
/*
LEX::m_sql_cmd can point to Sql_cmd allocated on thd->mem_root.
Unlink it now, before freeing the root.
*/
thd->lex->m_sql_cmd= NULL;
free_root(thd->mem_root,MYF(MY_KEEP_PREALLOC));
#if defined(ENABLED_PROFILING)

View File

@ -1598,13 +1598,8 @@ dict_table_rename_in_cache(
ut_ad(mutex_own(&dict_sys->mutex));
/* store the old/current name to an automatic variable */
if (strlen(table->name.m_name) + 1 <= sizeof(old_name)) {
strcpy(old_name, table->name.m_name);
} else {
ib::fatal() << "Too long table name: "
<< table->name
<< ", max length is " << MAX_FULL_NAME_LEN;
}
ut_a(strlen(table->name.m_name) < sizeof old_name);
strcpy(old_name, table->name.m_name);
fold = ut_fold_string(new_name);
@ -1815,7 +1810,7 @@ dict_table_rename_in_cache(
ulint db_len;
char* old_id;
char old_name_cs_filename[MAX_TABLE_NAME_LEN+20];
char old_name_cs_filename[MAX_FULL_NAME_LEN+1];
uint errors = 0;
/* All table names are internally stored in charset
@ -1832,7 +1827,8 @@ dict_table_rename_in_cache(
in old_name_cs_filename */
strncpy(old_name_cs_filename, old_name,
MAX_TABLE_NAME_LEN);
MAX_FULL_NAME_LEN);
old_name_cs_filename[MAX_FULL_NAME_LEN] = '\0';
if (strstr(old_name, TEMP_TABLE_PATH_PREFIX) == NULL) {
innobase_convert_to_system_charset(
@ -1854,7 +1850,9 @@ dict_table_rename_in_cache(
/* Old name already in
my_charset_filename */
strncpy(old_name_cs_filename, old_name,
MAX_TABLE_NAME_LEN);
MAX_FULL_NAME_LEN);
old_name_cs_filename[MAX_FULL_NAME_LEN]
= '\0';
}
}
@ -1880,7 +1878,7 @@ dict_table_rename_in_cache(
/* This is a generated >= 4.0.18 format id */
char table_name[MAX_TABLE_NAME_LEN] = "";
char table_name[MAX_TABLE_NAME_LEN + 1];
uint errors = 0;
if (strlen(table->name.m_name)
@ -1895,6 +1893,7 @@ dict_table_rename_in_cache(
/* Convert the table name to UTF-8 */
strncpy(table_name, table->name.m_name,
MAX_TABLE_NAME_LEN);
table_name[MAX_TABLE_NAME_LEN] = '\0';
innobase_convert_to_system_charset(
strchr(table_name, '/') + 1,
strchr(table->name.m_name, '/') + 1,
@ -1904,9 +1903,10 @@ dict_table_rename_in_cache(
/* Table name could not be converted
from charset my_charset_filename to
UTF-8. This means that the table name
is already in UTF-8 (#mysql#50). */
is already in UTF-8 (#mysql50#). */
strncpy(table_name, table->name.m_name,
MAX_TABLE_NAME_LEN);
table_name[MAX_TABLE_NAME_LEN] = '\0';
}
/* Replace the prefix 'databasename/tablename'

View File

@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2016, 2018, MariaDB Corporation.
Copyright (c) 2016, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -727,6 +727,7 @@ fts_reset_get_doc(
memset(get_doc, 0x0, sizeof(*get_doc));
get_doc->index_cache = ind_cache;
get_doc->cache = cache;
}
ut_ad(ib_vector_size(cache->get_docs)
@ -4805,12 +4806,12 @@ fts_tokenize_document(
ut_a(!doc->tokens);
ut_a(doc->charset);
doc->tokens = rbt_create_arg_cmp(
sizeof(fts_token_t), innobase_fts_text_cmp, (void*) doc->charset);
doc->tokens = rbt_create_arg_cmp(sizeof(fts_token_t),
innobase_fts_text_cmp,
(void*) doc->charset);
if (parser != NULL) {
fts_tokenize_param_t fts_param;
fts_param.result_doc = (result != NULL) ? result : doc;
fts_param.add_pos = 0;

View File

@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 2007, 2018, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2016, 2018, MariaDB Corporation.
Copyright (c) 2016, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -674,18 +674,17 @@ fts_fetch_index_words(
fts_zip_t* zip = static_cast<fts_zip_t*>(user_arg);
que_node_t* exp = sel_node->select_list;
dfield_t* dfield = que_node_get_val(exp);
short len = static_cast<short>(dfield_get_len(dfield));
ut_a(dfield_get_len(dfield) <= FTS_MAX_WORD_LEN);
uint16 len = uint16(dfield_get_len(dfield));
void* data = dfield_get_data(dfield);
/* Skip the duplicate words. */
if (zip->word.f_len == static_cast<ulint>(len)
&& !memcmp(zip->word.f_str, data, len)) {
if (zip->word.f_len == len && !memcmp(zip->word.f_str, data, len)) {
return(TRUE);
}
ut_a(len <= FTS_MAX_WORD_LEN);
memcpy(zip->word.f_str, data, len);
zip->word.f_len = len;
@ -693,6 +692,9 @@ fts_fetch_index_words(
ut_a(zip->zp->next_in == NULL);
/* The string is prefixed by len. */
/* FIXME: This is not byte order agnostic (InnoDB data files
with FULLTEXT INDEX are not portable between little-endian and
big-endian systems!) */
zip->zp->next_in = reinterpret_cast<byte*>(&len);
zip->zp->avail_in = sizeof(len);
@ -720,14 +722,13 @@ fts_fetch_index_words(
ut_a(len <= FTS_MAX_WORD_LEN);
len = 0;
}
break;
continue;
case Z_STREAM_END:
case Z_BUF_ERROR:
case Z_STREAM_ERROR:
default:
ut_error;
break;
}
}

View File

@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -68,11 +69,11 @@ dict_create_add_foreign_id(
sprintf(id, "%s_ibfk_%lu", name,
(ulong) (*id_nr)++);
} else {
char table_name[MAX_TABLE_NAME_LEN + 20] = "";
char table_name[MAX_TABLE_NAME_LEN + 21];
uint errors = 0;
strncpy(table_name, name,
MAX_TABLE_NAME_LEN + 20);
strncpy(table_name, name, (sizeof table_name) - 1);
table_name[(sizeof table_name) - 1] = '\0';
innobase_convert_to_system_charset(
strchr(table_name, '/') + 1,
@ -81,7 +82,8 @@ dict_create_add_foreign_id(
if (errors) {
strncpy(table_name, name,
MAX_TABLE_NAME_LEN + 20);
(sizeof table_name) - 1);
table_name[(sizeof table_name) - 1] = '\0';
}
/* no overflow if number < 1e13 */

View File

@ -98,8 +98,8 @@ row_merge_create_fts_sort_index(
field = dict_index_get_nth_field(new_index, 0);
field->name = NULL;
field->prefix_len = 0;
field->col = static_cast<dict_col_t*>(
mem_heap_alloc(new_index->heap, sizeof(dict_col_t)));
field->col = new(mem_heap_zalloc(new_index->heap, sizeof(dict_col_t)))
dict_col_t();
field->col->prtype = idx_field->col->prtype | DATA_NOT_NULL;
field->col->mtype = charset == &my_charset_latin1
? DATA_VARCHAR : DATA_VARMYSQL;
@ -113,8 +113,8 @@ row_merge_create_fts_sort_index(
field = dict_index_get_nth_field(new_index, 1);
field->name = NULL;
field->prefix_len = 0;
field->col = static_cast<dict_col_t*>(
mem_heap_alloc(new_index->heap, sizeof(dict_col_t)));
field->col = new(mem_heap_zalloc(new_index->heap, sizeof(dict_col_t)))
dict_col_t();
field->col->mtype = DATA_INT;
*opt_doc_id_size = FALSE;
@ -148,21 +148,16 @@ row_merge_create_fts_sort_index(
field->col->prtype = DATA_NOT_NULL | DATA_BINARY_TYPE;
field->col->mbminlen = 0;
field->col->mbmaxlen = 0;
/* The third field is on the word's position in the original doc */
field = dict_index_get_nth_field(new_index, 2);
field->name = NULL;
field->prefix_len = 0;
field->col = static_cast<dict_col_t*>(
mem_heap_alloc(new_index->heap, sizeof(dict_col_t)));
field->col = new(mem_heap_zalloc(new_index->heap, sizeof(dict_col_t)))
dict_col_t();
field->col->mtype = DATA_INT;
field->col->len = 4 ;
field->fixed_len = 4;
field->col->prtype = DATA_NOT_NULL;
field->col->mbminlen = 0;
field->col->mbmaxlen = 0;
return(new_index);
}

View File

@ -4345,11 +4345,12 @@ row_rename_table_for_mysql(
if (!new_is_tmp) {
/* Rename all constraints. */
char new_table_name[MAX_TABLE_NAME_LEN] = "";
char old_table_utf8[MAX_TABLE_NAME_LEN] = "";
char new_table_name[MAX_TABLE_NAME_LEN + 1];
char old_table_utf8[MAX_TABLE_NAME_LEN + 1];
uint errors = 0;
strncpy(old_table_utf8, old_name, MAX_TABLE_NAME_LEN);
old_table_utf8[MAX_TABLE_NAME_LEN] = '\0';
innobase_convert_to_system_charset(
strchr(old_table_utf8, '/') + 1,
strchr(old_name, '/') +1,
@ -4360,6 +4361,7 @@ row_rename_table_for_mysql(
my_charset_filename to UTF-8. This means that the
table name is already in UTF-8 (#mysql#50). */
strncpy(old_table_utf8, old_name, MAX_TABLE_NAME_LEN);
old_table_utf8[MAX_TABLE_NAME_LEN] = '\0';
}
info = pars_info_create();
@ -4370,6 +4372,7 @@ row_rename_table_for_mysql(
old_table_utf8);
strncpy(new_table_name, new_name, MAX_TABLE_NAME_LEN);
new_table_name[MAX_TABLE_NAME_LEN] = '\0';
innobase_convert_to_system_charset(
strchr(new_table_name, '/') + 1,
strchr(new_name, '/') +1,
@ -4380,6 +4383,7 @@ row_rename_table_for_mysql(
my_charset_filename to UTF-8. This means that the
table name is already in UTF-8 (#mysql#50). */
strncpy(new_table_name, new_name, MAX_TABLE_NAME_LEN);
new_table_name[MAX_TABLE_NAME_LEN] = '\0';
}
pars_info_add_str_literal(info, "new_table_utf8", new_table_name);

View File

@ -3,7 +3,7 @@
Copyright (c) 1996, 2017, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2008, Google Inc.
Copyright (c) 2009, Percona Inc.
Copyright (c) 2013, 2018, MariaDB Corporation.
Copyright (c) 2013, 2019, MariaDB Corporation.
Portions of this file contain modifications contributed and copyrighted by
Google, Inc. Those modifications are gratefully acknowledged and are described

View File

@ -1632,15 +1632,8 @@ dict_table_rename_in_cache(
ut_ad(mutex_own(&(dict_sys->mutex)));
/* store the old/current name to an automatic variable */
if (strlen(table->name) + 1 <= sizeof(old_name)) {
memcpy(old_name, table->name, strlen(table->name) + 1);
} else {
ut_print_timestamp(stderr);
fprintf(stderr, "InnoDB: too long table name: '%s', "
"max length is %d\n", table->name,
MAX_FULL_NAME_LEN);
ut_error;
}
ut_a(strlen(table->name) < sizeof old_name);
strcpy(old_name, table->name);
fold = ut_fold_string(new_name);
@ -1851,7 +1844,7 @@ dict_table_rename_in_cache(
ulint db_len;
char* old_id;
char old_name_cs_filename[MAX_TABLE_NAME_LEN+20];
char old_name_cs_filename[MAX_FULL_NAME_LEN+1];
uint errors = 0;
/* All table names are internally stored in charset
@ -1868,7 +1861,8 @@ dict_table_rename_in_cache(
in old_name_cs_filename */
strncpy(old_name_cs_filename, old_name,
MAX_TABLE_NAME_LEN);
MAX_FULL_NAME_LEN);
old_name_cs_filename[MAX_FULL_NAME_LEN] = '\0';
if (strstr(old_name, TEMP_TABLE_PATH_PREFIX) == NULL) {
innobase_convert_to_system_charset(
@ -1890,7 +1884,9 @@ dict_table_rename_in_cache(
/* Old name already in
my_charset_filename */
strncpy(old_name_cs_filename, old_name,
MAX_TABLE_NAME_LEN);
MAX_FULL_NAME_LEN);
old_name_cs_filename[MAX_FULL_NAME_LEN]
= '\0';
}
}
@ -1916,7 +1912,7 @@ dict_table_rename_in_cache(
/* This is a generated >= 4.0.18 format id */
char table_name[MAX_TABLE_NAME_LEN] = "";
char table_name[MAX_TABLE_NAME_LEN + 1];
uint errors = 0;
if (strlen(table->name) > strlen(old_name)) {
@ -1930,6 +1926,7 @@ dict_table_rename_in_cache(
/* Convert the table name to UTF-8 */
strncpy(table_name, table->name,
MAX_TABLE_NAME_LEN);
table_name[MAX_TABLE_NAME_LEN] = '\0';
innobase_convert_to_system_charset(
strchr(table_name, '/') + 1,
strchr(table->name, '/') + 1,
@ -1939,9 +1936,10 @@ dict_table_rename_in_cache(
/* Table name could not be converted
from charset my_charset_filename to
UTF-8. This means that the table name
is already in UTF-8 (#mysql#50). */
is already in UTF-8 (#mysql50#). */
strncpy(table_name, table->name,
MAX_TABLE_NAME_LEN);
table_name[MAX_TABLE_NAME_LEN] = '\0';
}
/* Replace the prefix 'databasename/tablename'

View File

@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2016, 2018, MariaDB Corporation.
Copyright (c) 2016, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -567,7 +567,7 @@ fts_index_cache_init(
index_cache->words = rbt_create_arg_cmp(
sizeof(fts_tokenizer_word_t), innobase_fts_text_cmp,
(void*)index_cache->charset);
(void*) index_cache->charset);
ut_a(index_cache->doc_stats == NULL);
@ -736,6 +736,7 @@ fts_reset_get_doc(
memset(get_doc, 0x0, sizeof(*get_doc));
get_doc->index_cache = ind_cache;
get_doc->cache = cache;
}
ut_ad(ib_vector_size(cache->get_docs)
@ -2004,7 +2005,8 @@ fts_create_one_index_table(
dict_mem_table_add_col(new_table, heap, "ilist", DATA_BLOB,
4130048, 0);
error = row_create_table_for_mysql(new_table, trx, false, FIL_ENCRYPTION_DEFAULT, FIL_DEFAULT_ENCRYPTION_KEY);
error = row_create_table_for_mysql(new_table, trx, false,
FIL_ENCRYPTION_DEFAULT, FIL_DEFAULT_ENCRYPTION_KEY);
if (error != DB_SUCCESS) {
trx->error_state = error;
@ -4800,8 +4802,9 @@ fts_tokenize_document(
ut_a(!doc->tokens);
ut_a(doc->charset);
doc->tokens = rbt_create_arg_cmp(
sizeof(fts_token_t), innobase_fts_text_cmp, (void*) doc->charset);
doc->tokens = rbt_create_arg_cmp(sizeof(fts_token_t),
innobase_fts_text_cmp,
(void*) doc->charset);
for (ulint i = 0; i < doc->text.f_len; i += inc) {
inc = fts_process_token(doc, result, i, 0);

View File

@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 2007, 2018, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2016, MariaDB Corporation. All Rights reserved.
Copyright (c) 2016, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -673,18 +673,17 @@ fts_fetch_index_words(
fts_zip_t* zip = static_cast<fts_zip_t*>(user_arg);
que_node_t* exp = sel_node->select_list;
dfield_t* dfield = que_node_get_val(exp);
short len = static_cast<short>(dfield_get_len(dfield));
ut_a(dfield_get_len(dfield) <= FTS_MAX_WORD_LEN);
uint16 len = uint16(dfield_get_len(dfield));
void* data = dfield_get_data(dfield);
/* Skip the duplicate words. */
if (zip->word.f_len == static_cast<ulint>(len)
&& !memcmp(zip->word.f_str, data, len)) {
if (zip->word.f_len == len && !memcmp(zip->word.f_str, data, len)) {
return(TRUE);
}
ut_a(len <= FTS_MAX_WORD_LEN);
memcpy(zip->word.f_str, data, len);
zip->word.f_len = len;
@ -692,6 +691,9 @@ fts_fetch_index_words(
ut_a(zip->zp->next_in == NULL);
/* The string is prefixed by len. */
/* FIXME: This is not byte order agnostic (InnoDB data files
with FULLTEXT INDEX are not portable between little-endian and
big-endian systems!) */
zip->zp->next_in = reinterpret_cast<byte*>(&len);
zip->zp->avail_in = sizeof(len);
@ -717,14 +719,13 @@ fts_fetch_index_words(
ut_a(len <= FTS_MAX_WORD_LEN);
len = 0;
}
break;
continue;
case Z_STREAM_END:
case Z_BUF_ERROR:
case Z_STREAM_ERROR:
default:
ut_error;
break;
}
}

View File

@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -65,11 +66,11 @@ dict_create_add_foreign_id(
sprintf(id, "%s_ibfk_%lu", name,
(ulong) (*id_nr)++);
} else {
char table_name[MAX_TABLE_NAME_LEN + 20] = "";
char table_name[MAX_TABLE_NAME_LEN + 21];
uint errors = 0;
strncpy(table_name, name,
MAX_TABLE_NAME_LEN + 20);
strncpy(table_name, name, (sizeof table_name) - 1);
table_name[(sizeof table_name) - 1] = '\0';
innobase_convert_to_system_charset(
strchr(table_name, '/') + 1,
@ -78,7 +79,8 @@ dict_create_add_foreign_id(
if (errors) {
strncpy(table_name, name,
MAX_TABLE_NAME_LEN + 20);
(sizeof table_name) - 1);
table_name[(sizeof table_name) - 1] = '\0';
}
/* no overflow if number < 1e13 */

View File

@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 2011-2012, Percona Inc. All Rights Reserved.
Copyright (c) 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -146,7 +147,7 @@ struct log_online_bitmap_file_range_struct {
size_t count; /*!< Number of files */
/*!< Dynamically-allocated array of info about individual files */
struct files_t {
char name[FN_REFLEN]; /*!< Name of a file */
char name[OS_FILE_MAX_PATH+1];/*!< Name of a file */
lsn_t start_lsn; /*!< Starting LSN of data in
this file */
ulong seq_num; /*!< Sequence number of this

View File

@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 2011-2012 Percona Inc. All Rights Reserved.
Copyright (C) 2016, MariaDB Corporation.
Copyright (C) 2016, 2019, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@ -1453,8 +1453,9 @@ log_online_setup_bitmap_file_range(
bitmap_files->files[array_pos].seq_num = file_seq_num;
strncpy(bitmap_files->files[array_pos].name,
bitmap_dir_file_info.name, FN_REFLEN);
bitmap_files->files[array_pos].name[FN_REFLEN - 1]
bitmap_dir_file_info.name,
OS_FILE_MAX_PATH);
bitmap_files->files[array_pos].name[OS_FILE_MAX_PATH]
= '\0';
bitmap_files->files[array_pos].start_lsn
= file_start_lsn;

View File

@ -101,8 +101,8 @@ row_merge_create_fts_sort_index(
field = dict_index_get_nth_field(new_index, 0);
field->name = NULL;
field->prefix_len = 0;
field->col = static_cast<dict_col_t*>(
mem_heap_alloc(new_index->heap, sizeof(dict_col_t)));
field->col = new(mem_heap_zalloc(new_index->heap, sizeof(dict_col_t)))
dict_col_t();
field->col->prtype = idx_field->col->prtype | DATA_NOT_NULL;
field->col->mtype = charset == &my_charset_latin1
? DATA_VARCHAR : DATA_VARMYSQL;
@ -116,8 +116,8 @@ row_merge_create_fts_sort_index(
field = dict_index_get_nth_field(new_index, 1);
field->name = NULL;
field->prefix_len = 0;
field->col = static_cast<dict_col_t*>(
mem_heap_alloc(new_index->heap, sizeof(dict_col_t)));
field->col = new(mem_heap_zalloc(new_index->heap, sizeof(dict_col_t)))
dict_col_t();
field->col->mtype = DATA_INT;
*opt_doc_id_size = FALSE;
@ -151,21 +151,16 @@ row_merge_create_fts_sort_index(
field->col->prtype = DATA_NOT_NULL | DATA_BINARY_TYPE;
field->col->mbminlen = 0;
field->col->mbmaxlen = 0;
/* The third field is on the word's position in the original doc */
field = dict_index_get_nth_field(new_index, 2);
field->name = NULL;
field->prefix_len = 0;
field->col = static_cast<dict_col_t*>(
mem_heap_alloc(new_index->heap, sizeof(dict_col_t)));
field->col = new(mem_heap_zalloc(new_index->heap, sizeof(dict_col_t)))
dict_col_t();
field->col->mtype = DATA_INT;
field->col->len = 4 ;
field->fixed_len = 4;
field->col->prtype = DATA_NOT_NULL;
field->col->mbminlen = 0;
field->col->mbmaxlen = 0;
return(new_index);
}

View File

@ -5183,11 +5183,12 @@ row_rename_table_for_mysql(
if (!new_is_tmp) {
/* Rename all constraints. */
char new_table_name[MAX_TABLE_NAME_LEN] = "";
char old_table_utf8[MAX_TABLE_NAME_LEN] = "";
char new_table_name[MAX_TABLE_NAME_LEN + 1];
char old_table_utf8[MAX_TABLE_NAME_LEN + 1];
uint errors = 0;
strncpy(old_table_utf8, old_name, MAX_TABLE_NAME_LEN);
old_table_utf8[MAX_TABLE_NAME_LEN] = '\0';
innobase_convert_to_system_charset(
strchr(old_table_utf8, '/') + 1,
strchr(old_name, '/') +1,
@ -5198,6 +5199,7 @@ row_rename_table_for_mysql(
my_charset_filename to UTF-8. This means that the
table name is already in UTF-8 (#mysql#50). */
strncpy(old_table_utf8, old_name, MAX_TABLE_NAME_LEN);
old_table_utf8[MAX_TABLE_NAME_LEN] = '\0';
}
info = pars_info_create();
@ -5208,6 +5210,7 @@ row_rename_table_for_mysql(
old_table_utf8);
strncpy(new_table_name, new_name, MAX_TABLE_NAME_LEN);
new_table_name[MAX_TABLE_NAME_LEN] = '\0';
innobase_convert_to_system_charset(
strchr(new_table_name, '/') + 1,
strchr(new_name, '/') +1,
@ -5218,6 +5221,7 @@ row_rename_table_for_mysql(
my_charset_filename to UTF-8. This means that the
table name is already in UTF-8 (#mysql#50). */
strncpy(new_table_name, new_name, MAX_TABLE_NAME_LEN);
new_table_name[MAX_TABLE_NAME_LEN] = '\0';
}
pars_info_add_str_literal(info, "new_table_utf8", new_table_name);

View File

@ -3,7 +3,7 @@
Copyright (c) 1996, 2017, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2008, Google Inc.
Copyright (c) 2009, Percona Inc.
Copyright (c) 2013, 2017, MariaDB Corporation
Copyright (c) 2013, 2019, MariaDB Corporation.
Portions of this file contain modifications contributed and copyrighted by
Google, Inc. Those modifications are gratefully acknowledged and are described
@ -3445,9 +3445,8 @@ srv_get_meta_data_filename(
if (strncmp(suffix, ".cfg", suffix_len) == 0) {
strcpy(filename, path);
} else {
ut_ad(strncmp(suffix, ".ibd", suffix_len) == 0);
strncpy(filename, path, len - suffix_len);
ut_ad(!strcmp(suffix, ".ibd"));
memcpy(filename, path, len - suffix_len);
suffix = filename + (len - suffix_len);
strcpy(suffix, ".cfg");
}