keepalives.diffs

application/octet-stream

Filename: keepalives.diffs
Type: application/octet-stream
Part: 1
Message: [BUG FIX]Connection fails with whitespace after keepalives parameter value
diff --git a/src/interfaces/ecpg/test/connect/test1.pgc b/src/interfaces/ecpg/test/connect/test1.pgc
index 961bd72ef2..28db6e4a5e 100644
--- a/src/interfaces/ecpg/test/connect/test1.pgc
+++ b/src/interfaces/ecpg/test/connect/test1.pgc
@@ -61,5 +61,9 @@ exec sql end declare section;
 	exec sql connect to unix:postgresql://localhost/ecpg2_regression user regress_ecpg_user1 identified by "wrongpw";
 	/* no disconnect necessary */
 
+	/* skip trailing whitespace */
+	exec sql connect to tcp:postgresql://localhost/ecpg2_regression?keepalives=1&keepalives_idle=1 as skip_trailing_whitespace user regress_ecpg_user1;
+	exec sql disconnect;
+
 	return 0;
 }
diff --git a/src/interfaces/ecpg/test/expected/connect-test1.c b/src/interfaces/ecpg/test/expected/connect-test1.c
index ffd24e2fc8..f8f966f58d 100644
--- a/src/interfaces/ecpg/test/expected/connect-test1.c
+++ b/src/interfaces/ecpg/test/expected/connect-test1.c
@@ -120,5 +120,13 @@ main(void)
 
 	/* no disconnect necessary */
 
+	/* skip trailing whitespace */
+	{ ECPGconnect(__LINE__, 0, "tcp:postgresql://localhost/ecpg2_regression?keepalives=1 & keepalives_idle=1" , "regress_ecpg_user1" , NULL , "skip_trailing_whitespace", 0); }
+#line 65 "test1.pgc"
+
+	{ ECPGdisconnect(__LINE__, "CURRENT");}
+#line 66 "test1.pgc"
+
+
 	return 0;
 }
diff --git a/src/interfaces/ecpg/test/expected/connect-test1.stderr b/src/interfaces/ecpg/test/expected/connect-test1.stderr
index 073951c0ed..8c27ac65f6 100644
--- a/src/interfaces/ecpg/test/expected/connect-test1.stderr
+++ b/src/interfaces/ecpg/test/expected/connect-test1.stderr
@@ -71,3 +71,7 @@
 [NO_PID]: sqlca: code: -402, state: 08001
 [NO_PID]: ECPGconnect: opening database ecpg2_regression on <DEFAULT> port <DEFAULT>  for user regress_ecpg_user1
 [NO_PID]: sqlca: code: 0, state: 00000
+[NO_PID]: ECPGconnect: opening database ecpg2_regression on localhost port <DEFAULT> with options keepalives=1 & keepalives_idle=1 for user regress_ecpg_user1
+[NO_PID]: sqlca: code: 0, state: 00000
+[NO_PID]: ecpg_finish: connection skip_trailing_whitespace closed
+[NO_PID]: sqlca: code: 0, state: 00000
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index d5a72587d2..67d0444317 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -2169,14 +2169,14 @@ connectFailureMessage(PGconn *conn, int errorno)
 static int
 useKeepalives(PGconn *conn)
 {
-	char	   *ep;
 	int			val;
 
 	if (conn->keepalives == NULL)
 		return 1;
-	val = strtol(conn->keepalives, &ep, 10);
-	if (*ep)
+
+	if (!pqParseIntParam(conn->keepalives, &val, conn, "keepalives"))
 		return -1;
+
 	return val != 0 ? 1 : 0;
 }