Fix segfault in certain case.
authorTatsuo Ishii <ishii@sraoss.co.jp>
Sun, 15 Sep 2019 13:39:18 +0000 (22:39 +0900)
committerTatsuo Ishii <ishii@sraoss.co.jp>
Mon, 16 Sep 2019 01:22:33 +0000 (10:22 +0900)
commitba596715a862989867af4bbd136892352b2b39e1
tree72c75c7eabd2740cc2ade1f9b87ea592d57128c0
parent3720629301f43be7001c8e668873675a17050fb2
Fix segfault in certain case.

The scenario is something like:

1) a named statement is created.
2) DEALLOCATE removes it.
3) an erroneous query is executed.

In #2, "sent message" for the named statement is removed but
"uncompleted_message" is left. Then after #3, in ReadyForQuery()
uncompleted_message is added and removed. However, storage for the
uncompleted_message has been already freed in #2, and it causes a
segfault.

Fix is, in SimpleQuery() set NULL to uncompleted_message if it's not
PREPARE command so that ReadyForQuery() does not try to remove the
already removed message.

Per bug 546.

Here is a minimum test case.

'P' "_plan0x7f2d465db530" "SELECT 1" 0
'S'
'Y'
'Q' "DEALLOCATE _plan0x7f2d465db530"
'Y'
'Q' "CREATE INDEX users_auth_id_index ON non_existing_table ( auth_id )"
'Y'
'X'
src/protocol/pool_proto_modules.c