mirror of
https://github.com/MariaDB/server.git
synced 2025-10-12 12:25:37 +03:00
Merge 10.3 into 10.4
This commit is contained in:
@@ -4165,7 +4165,8 @@ innobase_build_col_map(
|
||||
== dict_table_get_n_cols(new_table));
|
||||
DBUG_ASSERT(table->s->stored_fields > 0);
|
||||
|
||||
const size_t old_n_v_cols = table->s->fields - table->s->stored_fields;
|
||||
const uint old_n_v_cols = uint(table->s->fields
|
||||
- table->s->stored_fields);
|
||||
DBUG_ASSERT(old_n_v_cols == old_table->n_v_cols
|
||||
|| table->s->frm_version < FRM_VER_EXPRESSSIONS);
|
||||
DBUG_ASSERT(!old_n_v_cols || table->s->virtual_fields);
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2017, 2018, MariaDB Corporation.
|
||||
Copyright (c) 2017, 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
|
||||
@@ -224,7 +224,7 @@ struct sym_tab_t{
|
||||
/*!< SQL string to parse */
|
||||
size_t string_len;
|
||||
/*!< SQL string length */
|
||||
int next_char_pos;
|
||||
size_t next_char_pos;
|
||||
/*!< position of the next character in
|
||||
sql_string to give to the lexical
|
||||
analyzer */
|
||||
|
@@ -445,14 +445,29 @@ fil_name_parse(
|
||||
and end in .ibd. */
|
||||
bool corrupt = is_predefined_tablespace(space_id)
|
||||
|| len < sizeof "/a.ibd\0"
|
||||
|| (!first_page_no != !memcmp(ptr + len - 5, DOT_IBD, 5))
|
||||
|| memchr(ptr, OS_PATH_SEPARATOR, len) == NULL;
|
||||
|| (!first_page_no != !memcmp(ptr + len - 5, DOT_IBD, 5));
|
||||
|
||||
if (!corrupt && !memchr(ptr, OS_PATH_SEPARATOR, len)) {
|
||||
if (byte* c = static_cast<byte*>
|
||||
(memchr(ptr, OS_PATH_SEPARATOR_ALT, len))) {
|
||||
ut_ad(c >= ptr);
|
||||
ut_ad(c < ptr + len);
|
||||
do {
|
||||
*c = OS_PATH_SEPARATOR;
|
||||
} while ((c = static_cast<byte*>
|
||||
(memchr(ptr, OS_PATH_SEPARATOR_ALT,
|
||||
len - ulint(c - ptr)))) != NULL);
|
||||
} else {
|
||||
corrupt = true;
|
||||
}
|
||||
}
|
||||
|
||||
byte* end_ptr = ptr + len;
|
||||
|
||||
switch (type) {
|
||||
default:
|
||||
ut_ad(0); // the caller checked this
|
||||
/* fall through */
|
||||
case MLOG_FILE_NAME:
|
||||
if (corrupt) {
|
||||
ib::error() << "MLOG_FILE_NAME incorrect:" << ptr;
|
||||
@@ -513,8 +528,25 @@ fil_name_parse(
|
||||
|
||||
corrupt = corrupt
|
||||
|| new_len < sizeof "/a.ibd\0"
|
||||
|| memcmp(new_name + new_len - 5, DOT_IBD, 5) != 0
|
||||
|| !memchr(new_name, OS_PATH_SEPARATOR, new_len);
|
||||
|| memcmp(new_name + new_len - 5, DOT_IBD, 5) != 0;
|
||||
|
||||
if (!corrupt && !memchr(new_name, OS_PATH_SEPARATOR, new_len)) {
|
||||
if (byte* c = static_cast<byte*>
|
||||
(memchr(new_name, OS_PATH_SEPARATOR_ALT,
|
||||
new_len))) {
|
||||
ut_ad(c >= new_name);
|
||||
ut_ad(c < new_name + new_len);
|
||||
do {
|
||||
*c = OS_PATH_SEPARATOR;
|
||||
} while ((c = static_cast<byte*>
|
||||
(memchr(ptr, OS_PATH_SEPARATOR_ALT,
|
||||
new_len
|
||||
- ulint(c - new_name))))
|
||||
!= NULL);
|
||||
} else {
|
||||
corrupt = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (corrupt) {
|
||||
ib::error() << "MLOG_FILE_RENAME2 new_name incorrect:" << ptr
|
||||
@@ -1545,8 +1577,7 @@ parse_log:
|
||||
break;
|
||||
case MLOG_ZIP_PAGE_COMPRESS:
|
||||
/* Allow anything in page_type when creating a page. */
|
||||
ptr = page_zip_parse_compress(ptr, end_ptr,
|
||||
page, page_zip);
|
||||
ptr = page_zip_parse_compress(ptr, end_ptr, page, page_zip);
|
||||
break;
|
||||
case MLOG_ZIP_PAGE_COMPRESS_NO_DATA:
|
||||
if (NULL != (ptr = mlog_parse_index(
|
||||
|
@@ -2069,9 +2069,8 @@ pars_get_lex_chars(
|
||||
size_t max_size) /*!< in: maximum number of characters which fit
|
||||
in the buffer */
|
||||
{
|
||||
size_t len = size_t(
|
||||
pars_sym_tab_global->string_len
|
||||
- pars_sym_tab_global->next_char_pos);
|
||||
size_t len = pars_sym_tab_global->string_len
|
||||
- pars_sym_tab_global->next_char_pos;
|
||||
if (len == 0) {
|
||||
return(0);
|
||||
}
|
||||
@@ -2081,7 +2080,7 @@ pars_get_lex_chars(
|
||||
}
|
||||
|
||||
memcpy(buf, pars_sym_tab_global->sql_string
|
||||
+ pars_sym_tab_global->next_char_pos, ulint(len));
|
||||
+ pars_sym_tab_global->next_char_pos, len);
|
||||
|
||||
pars_sym_tab_global->next_char_pos += len;
|
||||
|
||||
|
Reference in New Issue
Block a user