Fix segfault in per_node_error_log() on armhf architecture.
authorTatsuo Ishii <ishii@postgresql.org>
Tue, 19 Jun 2018 01:10:33 +0000 (10:10 +0900)
committerTatsuo Ishii <ishii@postgresql.org>
Tue, 19 Jun 2018 01:22:12 +0000 (10:22 +0900)
commit75b27e72537a5d0c8e1be2c9a405328accdc8133
tree34bc61e780d0805c97bb39d1ab4838a111807433
parentffb89319fb43df41404321348f3fe84626c04b81
Fix segfault in per_node_error_log() on armhf architecture.

pool_extract_error_message() incorrectly returns 255 (in decimal) on
the architecture when previous message was not an error or a notice
message. In this case per_node_error_log() happily calls ereport since
the return value from pool_extract_error_message() is greater than
0. Unfortunately the message string returned by
pool_extract_error_message() points to garbage memory in this case, a
segfault occurs.

The fix gives per_node_error_log() a guard against the bug of
pool_extract_error_message(). Moreover, the change is more consistent
with other places where pool_extract_error_message() is called.

Fix for pool_extract_error_message() will come later on.

See:
https://github.com/pgpool/pgpool2/issues/14
for more detailed discussion.

Problem reported and patch by Christian Ehrhardt.
src/protocol/pool_proto_modules.c