diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2004-09-28 00:49:04 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2004-09-28 00:49:04 +0000 |
commit | f7332e88b901fbca98d5c3df83b2358548ad07e8 (patch) | |
tree | 9a18a904ef87afab58514f39d882b930b0b90ca7 | |
parent | 1ad687827607ee02a51182ea8a255c230e61c740 (diff) | |
download | postgresql-f7332e88b901fbca98d5c3df83b2358548ad07e8.tar.gz postgresql-f7332e88b901fbca98d5c3df83b2358548ad07e8.zip |
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.
-rw-r--r-- | contrib/dblink/dblink.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c index 17f36f1306d..2b33043c5a2 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) |