Commit Graph

5 Commits

Author SHA1 Message Date
Val Doroshchuk
3cea474ccf MaterializedMySQL: Fix the infinite loop in ReadBuffer::read
This fixes https://github.com/ClickHouse/ClickHouse/issues/33549

The infinite loop caused because sometimes the pos of ReadBuffer overflows the end.

It happens f.e. when `MySQLPacketPayloadReadBuffer::nextImpl` might return empty buffer,
because `in.nextIfAtEnd();` could not read more bytes and thus no bytes available (pos == end).
It might happen when a network error or the connection to MySQL was closed or killed.
This leads to empty `working_buffer` but successful returning from the func.
And check `if (in.eof())` from `MySQLBinlogEventReadBuffer::nextImpl()` fails and also causes empty its `working_buffer` and successul return.

At the end `payload.ignore(1)` and `payload.read(c)` produces the infinite loop since it is not eof() and ++pos overflows the end of the buffer.

Should be tested by `test_mysql_kill*` from test.py
2023-08-04 11:34:31 +02:00
Raúl Marín
54db7c6520 Enforce checking read output 2022-11-11 10:56:18 +01:00
Alexander Tokmakov
b94cc5c4e5 remove more stringstreams 2020-11-10 21:22:26 +03:00
Alexey Milovidov
fd84d16387 Fix "server failed to start" error 2020-11-07 03:14:53 +03:00
zhang2014
96bd3ac34b ISSUES-4006 split mysql protocol 2020-08-13 20:41:36 +08:00