From: Tom Lane Date: Tue, 28 Sep 2004 00:49:04 +0000 (+0000) Subject: Remove duplicate PQclear(res) operations leading to double free() and X-Git-Tag: REL8_0_0BETA4~260 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f7332e88b901fbca98d5c3df83b2358548ad07e8;p=postgresql Remove duplicate PQclear(res) operations leading to double free() and subsequent core dump. It looks like at one time DBLINK_RES_ERROR_AS_NOTICE didn't include a PQclear, but now it does and so these other ones are duplicate. --- diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c index 17f36f1306..2b33043c5a 100644 --- a/contrib/dblink/dblink.c +++ b/contrib/dblink/dblink.c @@ -345,7 +345,6 @@ dblink_open(PG_FUNCTION_ARGS) else { DBLINK_RES_ERROR_AS_NOTICE("sql error"); - PQclear(res); PG_RETURN_TEXT_P(GET_TEXT("ERROR")); } } @@ -419,7 +418,6 @@ dblink_close(PG_FUNCTION_ARGS) else { DBLINK_RES_ERROR_AS_NOTICE("sql error"); - PQclear(res); PG_RETURN_TEXT_P(GET_TEXT("ERROR")); } } @@ -531,8 +529,6 @@ dblink_fetch(PG_FUNCTION_ARGS) DBLINK_RES_ERROR("sql error"); else { - if (res) - PQclear(res); DBLINK_RES_ERROR_AS_NOTICE("sql error"); SRF_RETURN_DONE(funcctx); } @@ -720,11 +716,9 @@ dblink_record(PG_FUNCTION_ARGS) DBLINK_RES_ERROR("sql error"); else { - if (res) - PQclear(res); + DBLINK_RES_ERROR_AS_NOTICE("sql error"); if (freeconn) PQfinish(conn); - DBLINK_RES_ERROR_AS_NOTICE("sql error"); SRF_RETURN_DONE(funcctx); } } @@ -938,13 +932,15 @@ dblink_exec(PG_FUNCTION_ARGS) * result tuple */ sql_cmd_status = GET_TEXT(PQcmdStatus(res)); + PQclear(res); } else + { + PQclear(res); ereport(ERROR, (errcode(ERRCODE_S_R_E_PROHIBITED_SQL_STATEMENT_ATTEMPTED), errmsg("statement returning results not allowed"))); - - PQclear(res); + } /* if needed, close the connection to the database and cleanup */ if (freeconn)