Date: 2023-09-14
Tag: 2.10.8

## Overview

2.10.8 is the ninth [stable][release_policy] version of the 2.10 release
series. It introduces 5 improvements and resolves 28 bugs since
2.10.7.

The "stable" label means that we have all planned features implemented and we
see no high-impact issues. However, if you encounter an issue, feel free to
[report it][issues] on GitHub.

[release_policy]: https://www.tarantool.io/en/doc/latest/dev_guide/release_management/#release-policy
[issues]: https://github.com/tarantool/tarantool/issues

## Compatibility

Tarantool 2.x is backward compatible with Tarantool 1.10.x in the binary data
layout, client-server protocol, and replication protocol.

Please [upgrade][upgrade] using the `box.schema.upgrade()` procedure to unlock
all the new features of the 2.x series.

[upgrade]: https://www.tarantool.io/en/doc/latest/book/admin/upgrades/

## Functionality added or changed

### Box

* The maximum length of `box.cfg{}` string parameters is now 512 instead of 256.

### Test

#### Fuzz

* LuaJIT now can be fuzzed using grammar-based fuzzer (gh-4823).

### Build

* Hardening against memory corruption attacks is now enabled by default on
  FreeBSD (gh-7536).
* Added the CMake option `FIBER_STACK_SIZE` to set the default fiber stack size.
* Updated libcurl to version 8.3.0.

## Bugs fixed

### Core

* Fixed a bug when Tarantool failed to decode a request containing an unknown
  IPROTO key. The bug resulted in broken connectivity between Tarantool 2.10
  and 2.11 (gh-8745).
* Fixed a bug causing the `ER_CURSOR_NO_TRANSACTION` failure for transactions
  on synchronous spaces when the `on_commit/on_rollback` triggers are set
  (gh-8505).
* Fixed a bug causing the effective session and user are not propagated to
  `box.on_commit` and `box.on_rollback` trigger callbacks when transaction
  is synchronous (gh-8742).
* Fixed a crash that could happen when Tarantool is started in the
  [background mode](https://www.tarantool.io/en/doc/latest/reference/configuration/#confval-background)
  (gh-6128).
* Fixed a bug when MVCC sometimes lost gap record (gh-8326).
* Fixed a bug when MVCC rollback of prepared statement could break internal
  invariants (gh-8648).
* Now MVCC engine automatically aborts a transaction if it reads changes
  of a prepared transaction and this transaction is aborted (gh-8654).
* Fixed a bug that caused writing incorrect values into the `stream_id` field
  of xlog headers (gh-8783).
* Fixed a bug when a space that is referenced by a foreign key could not
  be truncated even if the referring space was empty (gh-8946).
* Fixed a crash that could happen when Tarantool is compiled by `clang`
  version 15 and above with enabled AddressSanitizer
  (tarantool/tarantool-qa#321).
* Fixed a use-after-free bug in iproto server code (gh-9037).
* Fixed a heap-buffer-overflow bug in fiber creation code (gh-9026).

### Memtx

* Fixed a heap-use-after-free bug in the transaction manager, which could occur
  when performing a DDL operation concurrently with a transaction on the same
  space (gh-8781).

### Vinyl

* Fixed a heap-use-after-free bug in the Vinyl read iterator caused by a race
  between a disk read and a memory dump task. The bug could lead to a crash or
  an invalid query result (gh-8852).

### Replication

* Fixed a possible failure to promote the desired node by `box.ctl.promote()` on
  a cluster with nodes configured with `election_mode = "candidate"` (gh-8497).
* Fixed nodes configured with `election_mode = 'candidate'` spuriously detecting
  a split-vote when another candidate should win with exactly a quorum of votes
  for it (gh-8698).

### LuaJIT

Backported patches from the vanilla LuaJIT trunk (gh-8516). The following issues
were fixed as part of this activity:

* Fixed canonicalization of +-0.0 keys for `IR_NEWREF`.
* Fixed result truncation for `bit.rol` on x86_64 platforms.
* Fixed `lua_yield()` invocation inside C hooks.
* Fixed memory chunk allocation beyond the memory limit.
* Fixed TNEW load forwarding with instable types.
* Fixed use-def analysis for `BC_VARG`, `BC_FUNCV`.
Backported patches from the vanilla LuaJIT trunk (gh-8825). The following issues
were fixed as part of this activity:

* Fixed `BC_UCLO` insertion for returns.
* Fixed recording of `BC_VARG` with unused vararg values.
* Initialization instructions on trace are now emitted only for the first
  member of a union.
* Prevent integer overflow while parsing long strings.
* Fixed various `^` operator and `math.pow()` function inconsistencies.
* Fixed parsing with predicting `next()` and `pairs()`.
* Fixed binary number literal parsing. Parsing of binary number with a zero
  fractional part raises error too now.
* Fixed load forwarding optimization applied after table rehashing.
* Fixed recording of the `BC_TSETM`.

### Lua

* Fixed the xlog reader Lua module to show unknown row header fields. Before
  this change the xlog reader silently skipped them.

#### Netbox

* Fixed a heap-use-after-free bug in the function creating a tuple format Lua
  object for `net.box` (gh-8889).

### Box

* Fixed the memory leaks caused by the multi-statement transaction errors in the
  space index building and the space format checking operations (gh-8773).
* Fixed a bug in the box console implementation because of
  which the `language` parameter was shared between connected
  clients (gh-8817).
* Fixed an invalid memory access in a corner case of a specialized comparison
  function (gh-8899).

### Console

* Fixed console ignoring `-i` flag in case stdin is not a tty (gh-5064).

### Datetime

* Fixed a bug raising a false positive error when creating new intervals with
  range boundary values (gh-8878).
* Fixed a bug with buffer overflow in tnt_strptime (gh-8502).

### Http

* Fixed a streaming connection stuck if etcd is stopped
  unexpectedly (gh-9086).

### Msgpack

* Fixed decoding datetime intervals with fields larger than possible int32
  values (gh-8887).
