diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index fb5a1bd..1c2ef9a 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -1127,6 +1127,7 @@ escape_quotes(const char *src)
 static void
 GenerateRecoveryConf(PGconn *conn)
 {
+	PQExpBufferData		arg_buf;
 	PQconninfoOption *connOptions;
 	PQconninfoOption *option;
 
@@ -1137,6 +1138,13 @@ GenerateRecoveryConf(PGconn *conn)
 		disconnect_and_exit(1);
 	}
 
+	initPQExpBuffer(&arg_buf);
+	if (PQExpBufferDataBroken(arg_buf))
+	{
+		fprintf(stderr, _("%s: out of memory"), progname);
+		disconnect_and_exit(1);
+	}
+
 	connOptions = PQconninfo(conn);
 	if (connOptions == NULL)
 	{
@@ -1150,6 +1158,7 @@ GenerateRecoveryConf(PGconn *conn)
 	for (option = connOptions; option && option->keyword; option++)
 	{
 		char	   *escaped;
+		char	   *escaped2;
 
 		/*
 		 * Do not emit this setting if: - the setting is "replication",
@@ -1169,10 +1178,13 @@ GenerateRecoveryConf(PGconn *conn)
 		 * necessary and doubled single quotes around the value string.
 		 */
 		escaped = escape_quotes(option->val);
+		printfPQExpBuffer(&arg_buf, "%s='%s'", option->keyword, escaped);
 
-		appendPQExpBuffer(recoveryconfcontents, "%s=''%s'' ", option->keyword, escaped);
+		escaped2 = escape_quotes(arg_buf.data);
+		appendPQExpBuffer(recoveryconfcontents, "%s ", escaped2);
 
 		free(escaped);
+		free(escaped2);
 	}
 
 	appendPQExpBufferStr(recoveryconfcontents, "'\n");
@@ -1183,6 +1195,7 @@ GenerateRecoveryConf(PGconn *conn)
 	}
 
 	PQconninfoFree(connOptions);
+	termPQExpBuffer(&arg_buf);
 }
 
 
