pgpool2.git / summary / log / commit / refs

commit    9ca003a7b74347ec355e6c8a2b213b19e042e7bd
Author:   Tatsuo Ishii <ishii at sraoss.co.jp>
Date:     Wed Feb 10 09:41:43 2010 +0000

    Fix pool_extract_error_message not to write past end of message_buf.
    This causes kind = 0 error on some platforms/gcc combo. Patch
    contributed by Akio Ishida.  Minor tweak by Tatsuo.


pool_process_query.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/pool_process_query.c b/pool_process_query.c index 976a1a3d0..87fe0b685 100644 --- a/pool_process_query.c +++ b/pool_process_query.c @@ -4458,9 +4458,8 @@ int pool_extract_error_message(bool read_kind, POOL_CONNECTION *backend, int maj if (*e == 'M') { e++; - len = Max(sizeof(message_buf)-1, strlen(e)); - memcpy(message_buf, e, len); - message_buf[sizeof(message_buf)] = '\0'; + strncpy(message_buf, e, sizeof(message_buf)-1); + message_buf[sizeof(message_buf)-1] = '\0'; break; } else @@ -4471,7 +4470,7 @@ int pool_extract_error_message(bool read_kind, POOL_CONNECTION *backend, int maj else { str = pool_read_string(backend, &len, 0); - len = Max(sizeof(message_buf)-1, len); + len = Min(sizeof(message_buf)-1, len); readlen += len; if (readlen >= sizeof(buf)) @@ -4482,7 +4481,7 @@ int pool_extract_error_message(bool read_kind, POOL_CONNECTION *backend, int maj memcpy(p, str, len); memcpy(message_buf, str, len); - message_buf[sizeof(message_buf)] = '\0'; + message_buf[len] = '\0'; } if (unread) [parent: f68b5cd07baf]