push
github
memtx: fix a bug with mvcc and exclude_null option Before this patch MVCC engine expected that if index_replace sets `result` to NULL then index_replace sets `successor` to something (NULL or existing tuple, depending on index type). That looked fine because by contract `successor` is set when true insertion was happened. Unfortunately it was not considered that in case of part with `exclude_null` option in index the insertion can be silently skipped and thus `successor` can be not set. The latter access of it was actually an UB. Fix it by explicit check of tuple_key_is_excluded and work on this case correctly. Note that logically `index_replace` should return a flag whether the new tuple was filtered (excluded) by key_def. But on the other hand this flag is required only for mvcc while the function is already has lots of arguments and it's very cheap to determine this flag right from memtx_tx, so I decided to make the most simple patch. NO_DOC=bugfix (cherry picked from commit 14e212976)
66577 of 118954 branches covered (55.97%)
13 of 13 new or added lines in 1 file covered. (100.0%)
54 existing lines in 16 files now uncovered.98858 of 113850 relevant lines covered (86.83%)
2479229.19 hits per line
The file "src/lib/msgpuck/msgpuck.h" isn't available on github. Either it's been removed, or the repo root directory needs to be updated.