pgpool2.git / summary / log / commit / refs
commit c410fcef85e6d1c19a5c17537ef14a896880fb20
Author: Tatsuo Ishii <ishii@sraoss.co.jp>
Date: Sun Sep 15 13:39:18 2019 +0000
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 | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/protocol/pool_proto_modules.c b/src/protocol/pool_proto_modules.c
index deb01f4ee..eb2ae9dfe 100644
--- a/src/protocol/pool_proto_modules.c
+++ b/src/protocol/pool_proto_modules.c
@@ -604,6 +604,8 @@ SimpleQuery(POOL_CONNECTION * frontend,
query_context);
session_context->uncompleted_message = msg;
}
+ else
+ session_context->uncompleted_message = NULL;
}
[parent: f92e56eada6c]