diff --git a/mysql-test/suite/innodb/r/innodb-blob.result b/mysql-test/suite/innodb/r/innodb-blob.result index 0f5af1c7f76..569b6d0d68a 100644 --- a/mysql-test/suite/innodb/r/innodb-blob.result +++ b/mysql-test/suite/innodb/r/innodb-blob.result @@ -54,7 +54,6 @@ SELECT @@transaction_isolation; READ-UNCOMMITTED SELECT a, RIGHT(b,20), RIGHT(c,20) FROM t3; a RIGHT(b,20) RIGHT(c,20) -1 ffffffffffffffffffff 2 gggggggggggggggggggg hhhhhhhhhhhhhhhhhhhh set debug_sync='now SIGNAL go_upd'; # Connection default: diff --git a/storage/innobase/include/mem0mem.ic b/storage/innobase/include/mem0mem.ic index f0ef82f3fda..8075113e6ad 100644 --- a/storage/innobase/include/mem0mem.ic +++ b/storage/innobase/include/mem0mem.ic @@ -146,12 +146,16 @@ static inline void *mem_heap_zalloc(mem_heap_t *heap, ulint n) { @param[in] n number of bytes; if the heap is allowed to grow into the buffer pool, this must be <= MEM_MAX_ALLOC_IN_BUF @return allocated storage, NULL if did not succeed (only possible for -MEM_HEAP_BTR_SEARCH type heaps) */ +MEM_HEAP_BTR_SEARCH type heaps) or n is 0. */ static inline void *mem_heap_alloc(mem_heap_t *heap, ulint n) { mem_block_t *block; byte *buf; ulint free; + if (n == 0) { + return (nullptr); + } + ut_d(mem_block_validate(heap)); block = UT_LIST_GET_LAST(heap->base); diff --git a/storage/innobase/row/row0row.cc b/storage/innobase/row/row0row.cc index 5cba5dfa58d..056faefb7f8 100644 --- a/storage/innobase/row/row0row.cc +++ b/storage/innobase/row/row0row.cc @@ -134,7 +134,7 @@ dtuple_t *row_build_index_entry_low( dfield2 = dtuple_get_nth_v_field(row, v_col->v_pos); ut_ad(dfield_is_null(dfield2) || dfield2->len == UNIV_NO_INDEX_VALUE || - dfield2->data); + dfield2->len == 0 || dfield2->data); } else { dfield2 = dtuple_get_nth_field(row, col_no); ut_ad(dfield_get_type(dfield2)->mtype == DATA_MISSING ||