*** a/src/interfaces/libpq/fe-connect.c --- b/src/interfaces/libpq/fe-connect.c *************** *** 292,297 **** static PGconn *makeEmptyPGconn(void); --- 292,298 ---- static void fillPGconn(PGconn *conn, PQconninfoOption *connOptions); static void freePGconn(PGconn *conn); static void closePGconn(PGconn *conn); + static PQconninfoOption *conninfo_init(PQExpBuffer errorMessage); static PQconninfoOption *conninfo_parse(const char *conninfo, PQExpBuffer errorMessage, bool use_defaults); static PQconninfoOption *conninfo_array_parse(const char *const * keywords, *************** *** 840,853 **** PQconndefaults(void) return NULL; /* out of memory already :-( */ /* Make a working copy of PQconninfoOptions */ ! connOptions = malloc(sizeof(PQconninfoOptions)); if (connOptions == NULL) - { - printfPQExpBuffer(&errorBuf, - libpq_gettext("out of memory\n")); return NULL; - } - memcpy(connOptions, PQconninfoOptions, sizeof(PQconninfoOptions)); if (!conninfo_fill_defaults(connOptions, &errorBuf)) { --- 841,849 ---- return NULL; /* out of memory already :-( */ /* Make a working copy of PQconninfoOptions */ ! connOptions = conninfo_init(&errorBuf); if (connOptions == NULL) return NULL; if (!conninfo_fill_defaults(connOptions, &errorBuf)) { *************** *** 4005,4010 **** PQconninfoParse(const char *conninfo, char **errmsg) --- 4001,4025 ---- } /* + * Makes a copy of PQconninfoOptions array. + */ + static PQconninfoOption * + conninfo_init(PQExpBuffer errorMessage) + { + PQconninfoOption *options; + + options = malloc(sizeof(PQconninfoOptions)); + if (options == NULL) + { + printfPQExpBuffer(errorMessage, + libpq_gettext("out of memory\n")); + return NULL; + } + memcpy(options, PQconninfoOptions, sizeof(PQconninfoOptions)); + return options; + } + + /* * Conninfo parser routine * * If successful, a malloc'd PQconninfoOption array is returned. *************** *** 4026,4039 **** conninfo_parse(const char *conninfo, PQExpBuffer errorMessage, PQconninfoOption *option; /* Make a working copy of PQconninfoOptions */ ! options = malloc(sizeof(PQconninfoOptions)); if (options == NULL) - { - printfPQExpBuffer(errorMessage, - libpq_gettext("out of memory\n")); return NULL; - } - memcpy(options, PQconninfoOptions, sizeof(PQconninfoOptions)); /* Need a modifiable copy of the input string */ if ((buf = strdup(conninfo)) == NULL) --- 4041,4049 ---- PQconninfoOption *option; /* Make a working copy of PQconninfoOptions */ ! options = conninfo_init(errorMessage); if (options == NULL) return NULL; /* Need a modifiable copy of the input string */ if ((buf = strdup(conninfo)) == NULL) *************** *** 4252,4266 **** conninfo_array_parse(const char *const * keywords, const char *const * values, } /* Make a working copy of PQconninfoOptions */ ! options = malloc(sizeof(PQconninfoOptions)); if (options == NULL) { - printfPQExpBuffer(errorMessage, - libpq_gettext("out of memory\n")); PQconninfoFree(str_options); return NULL; } - memcpy(options, PQconninfoOptions, sizeof(PQconninfoOptions)); i = 0; /* Parse the keywords/values arrays */ --- 4262,4273 ---- } /* Make a working copy of PQconninfoOptions */ ! options = conninfo_init(errorMessage); if (options == NULL) { PQconninfoFree(str_options); return NULL; } i = 0; /* Parse the keywords/values arrays */