diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index eece99ab1d6e5c3f21bf96807f1895e408d7ef52..817d83b9cb4382565e663b92ea86e1dd4adb0c4d 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -4303,6 +4303,7 @@ conninfo_array_parse(const char *const * keywords, const char *const * values,
 	{
 		printfPQExpBuffer(errorMessage,
 						  libpq_gettext("out of memory\n"));
+		PQconninfoFree(str_options);
 		return NULL;
 	}
 	memcpy(options, PQconninfoOptions, sizeof(PQconninfoOptions));
@@ -4330,6 +4331,7 @@ conninfo_array_parse(const char *const * keywords, const char *const * values,
 						 libpq_gettext("invalid connection option \"%s\"\n"),
 								  pname);
 				PQconninfoFree(options);
+				PQconninfoFree(str_options);
 				return NULL;
 			}
 
@@ -4374,6 +4376,7 @@ conninfo_array_parse(const char *const * keywords, const char *const * values,
 					printfPQExpBuffer(errorMessage,
 									  libpq_gettext("out of memory\n"));
 					PQconninfoFree(options);
+					PQconninfoFree(str_options);
 					return NULL;
 				}
 			}