pgpool2.git / summary / log / commit / refs
commit 5c53a399e4d20ea4850ccd8f3409000eadcc7bd4
Author: Tatsuo Ishii <ishii at sraoss.co.jp>
Date: Wed Dec 16 07:27:14 2009 +0000
Fix sloppy coding of detect_erorr(). Check memory allocation error,
check buffer overrun error.
pool_process_query.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/pool_process_query.c b/pool_process_query.c
index df0d387df..cc3572d2c 100644
--- a/pool_process_query.c
+++ b/pool_process_query.c
@@ -3999,8 +3999,23 @@ static int detect_error(POOL_CONNECTION *backend, char *error_code, int major, c
len = ntohl(len) - 4;
str = malloc(len);
+
+ if (!str)
+ {
+ pool_error("detect_error: malloc failed");
+ return POOL_END;
+ }
+
pool_read(backend, str, len);
readlen += len;
+
+ if (readlen >= sizeof(buf))
+ {
+ pool_error("detect_error: not enough buffer space");
+ free(str);
+ return POOL_END;
+ }
+
memcpy(p, str, len);
/*
@@ -4024,6 +4039,13 @@ static int detect_error(POOL_CONNECTION *backend, char *error_code, int major, c
{
str = pool_read_string(backend, &len, 0);
readlen += len;
+
+ if (readlen >= sizeof(buf))
+ {
+ pool_error("detect_error: not enough buffer space");
+ return POOL_END;
+ }
+
memcpy(p, str, len);
}
}
[parent: 78921f3bcbab]