pgsql: Don't use Asserts to check for violations of replication protoco

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Don't use Asserts to check for violations of replication protoco
Дата
Msg-id E1ls6yr-0007pn-At@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Don't use Asserts to check for violations of replication protocol.

Using an Assert to check the validity of incoming messages is an
extremely poor decision.  In a debug build, it should not be that easy
for a broken or malicious remote client to crash the logrep worker.
The consequences could be even worse in non-debug builds, which will
fail to make such checks at all, leading to who-knows-what misbehavior.
Hence, promote every Assert that could possibly be triggered by wrong
or out-of-order replication messages to a full test-and-ereport.

To avoid bloating the set of messages the translation team has to cope
with, establish a policy that replication protocol violation error
reports don't need to be translated.  Hence, all the new messages here
use errmsg_internal().  A couple of old messages are changed likewise
for consistency.

Along the way, fix some non-idiomatic or outright wrong uses of
hash_search().

Most of these mistakes are new with the "streaming replication"
patch (commit 464824323), but a couple go back a long way.
Back-patch as appropriate.

Discussion: https://postgr.es/m/1719083.1623351052@sss.pgh.pa.us

Branch
------
REL_12_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/1f280e83314f6000b89046adc786f680e18d902f

Modified Files
--------------
src/backend/replication/logical/reorderbuffer.c | 2 +-
src/backend/replication/logical/worker.c        | 9 ++++++++-
2 files changed, 9 insertions(+), 2 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Andrew Dunstan
Дата:
Сообщение: pgsql: Fix new recovery test for use under msys
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Ensure pg_filenode_relation(0, 0) returns NULL.