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]