Commit 22a6fa57 authored by Marko Mäkelä's avatar Marko Mäkelä

MDEV-19114 post-push fix: SIGSEGV on INSERT

ins_node_create_entry_list(): Create dummy empty tuples for
corrupted or incomplete indexes, to avoid dereferencing a NULL
dict_field_t::col pointer in row_build_index_entry_low().

This issue was found by a crash in the test gcol.innodb_virtual_basic
when merging the fix to 10.5.
parent ed29782a
......@@ -95,33 +95,20 @@ ins_node_create(
return(node);
}
/***********************************************************//**
Creates an entry template for each index of a table. */
static
void
ins_node_create_entry_list(
/*=======================*/
ins_node_t* node) /*!< in: row insert node */
/** Create an row template for each index of a table. */
static void ins_node_create_entry_list(ins_node_t *node)
{
dict_index_t* index;
dtuple_t* entry;
ut_ad(node->entry_sys_heap);
/* We will include all indexes (include those corrupted
secondary indexes) in the entry list. Filtration of
these corrupted index will be done in row_ins() */
node->entry_list.reserve(UT_LIST_GET_LEN(node->table->indexes));
for (index = dict_table_get_first_index(node->table);
index != 0;
index = dict_table_get_next_index(index)) {
entry = row_build_index_entry_low(
node->row, NULL, index, node->entry_sys_heap,
for (dict_index_t *index= dict_table_get_first_index(node->table); index;
index= dict_table_get_next_index(index))
{
/* Corrupted or incomplete secondary indexes will be filtered out in
row_ins(). */
dtuple_t *entry= index->online_status >= ONLINE_INDEX_ABORTED
? dtuple_create(node->entry_sys_heap, 0)
: row_build_index_entry_low(node->row, NULL, index, node->entry_sys_heap,
ROW_BUILD_FOR_INSERT);
node->entry_list.push_back(entry);
}
}
......
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