Commit 44e64fd7 authored by Marko Mäkelä's avatar Marko Mäkelä

Merge 10.2 into 10.3

parents 7b42d892 5633f83c
...@@ -3282,7 +3282,8 @@ innobase_build_col_map( ...@@ -3282,7 +3282,8 @@ innobase_build_col_map(
== dict_table_get_n_cols(new_table)); == dict_table_get_n_cols(new_table));
DBUG_ASSERT(table->s->stored_fields > 0); 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 DBUG_ASSERT(old_n_v_cols == old_table->n_v_cols
|| table->s->frm_version < FRM_VER_EXPRESSSIONS); || table->s->frm_version < FRM_VER_EXPRESSSIONS);
DBUG_ASSERT(!old_n_v_cols || table->s->virtual_fields); DBUG_ASSERT(!old_n_v_cols || table->s->virtual_fields);
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. 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 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 the terms of the GNU General Public License as published by the Free Software
...@@ -224,7 +224,7 @@ struct sym_tab_t{ ...@@ -224,7 +224,7 @@ struct sym_tab_t{
/*!< SQL string to parse */ /*!< SQL string to parse */
size_t string_len; size_t string_len;
/*!< SQL string length */ /*!< SQL string length */
int next_char_pos; size_t next_char_pos;
/*!< position of the next character in /*!< position of the next character in
sql_string to give to the lexical sql_string to give to the lexical
analyzer */ analyzer */
......
...@@ -450,14 +450,29 @@ fil_name_parse( ...@@ -450,14 +450,29 @@ fil_name_parse(
and end in .ibd. */ and end in .ibd. */
bool corrupt = is_predefined_tablespace(space_id) bool corrupt = is_predefined_tablespace(space_id)
|| len < sizeof "/a.ibd\0" || len < sizeof "/a.ibd\0"
|| (!first_page_no != !memcmp(ptr + len - 5, DOT_IBD, 5)) || (!first_page_no != !memcmp(ptr + len - 5, DOT_IBD, 5));
|| memchr(ptr, OS_PATH_SEPARATOR, len) == NULL;
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; byte* end_ptr = ptr + len;
switch (type) { switch (type) {
default: default:
ut_ad(0); // the caller checked this ut_ad(0); // the caller checked this
/* fall through */
case MLOG_FILE_NAME: case MLOG_FILE_NAME:
if (corrupt) { if (corrupt) {
ib::error() << "MLOG_FILE_NAME incorrect:" << ptr; ib::error() << "MLOG_FILE_NAME incorrect:" << ptr;
...@@ -518,8 +533,25 @@ fil_name_parse( ...@@ -518,8 +533,25 @@ fil_name_parse(
corrupt = corrupt corrupt = corrupt
|| new_len < sizeof "/a.ibd\0" || new_len < sizeof "/a.ibd\0"
|| memcmp(new_name + new_len - 5, DOT_IBD, 5) != 0 || memcmp(new_name + new_len - 5, DOT_IBD, 5) != 0;
|| !memchr(new_name, OS_PATH_SEPARATOR, new_len);
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) { if (corrupt) {
ib::error() << "MLOG_FILE_RENAME2 new_name incorrect:" << ptr ib::error() << "MLOG_FILE_RENAME2 new_name incorrect:" << ptr
...@@ -1605,8 +1637,7 @@ recv_parse_or_apply_log_rec_body( ...@@ -1605,8 +1637,7 @@ recv_parse_or_apply_log_rec_body(
break; break;
case MLOG_ZIP_PAGE_COMPRESS: case MLOG_ZIP_PAGE_COMPRESS:
/* Allow anything in page_type when creating a page. */ /* Allow anything in page_type when creating a page. */
ptr = page_zip_parse_compress(ptr, end_ptr, ptr = page_zip_parse_compress(ptr, end_ptr, page, page_zip);
page, page_zip);
break; break;
case MLOG_ZIP_PAGE_COMPRESS_NO_DATA: case MLOG_ZIP_PAGE_COMPRESS_NO_DATA:
if (NULL != (ptr = mlog_parse_index( if (NULL != (ptr = mlog_parse_index(
......
...@@ -2069,9 +2069,8 @@ pars_get_lex_chars( ...@@ -2069,9 +2069,8 @@ pars_get_lex_chars(
size_t max_size) /*!< in: maximum number of characters which fit size_t max_size) /*!< in: maximum number of characters which fit
in the buffer */ in the buffer */
{ {
size_t len = size_t( size_t len = pars_sym_tab_global->string_len
pars_sym_tab_global->string_len - pars_sym_tab_global->next_char_pos;
- pars_sym_tab_global->next_char_pos);
if (len == 0) { if (len == 0) {
return(0); return(0);
} }
...@@ -2081,7 +2080,7 @@ pars_get_lex_chars( ...@@ -2081,7 +2080,7 @@ pars_get_lex_chars(
} }
memcpy(buf, pars_sym_tab_global->sql_string 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; pars_sym_tab_global->next_char_pos += len;
......
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