From 117d73a9e7af61f6742e3d2b46f1dfbe3e02b9ca Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Sun, 28 May 2006 17:23:29 +0000
Subject: [PATCH] Don't call PQclear until the struct is really no longer going
 to be used. Per Coverity bug #304.  Thanks to Martijn van Oosterhout for
 reporting it.

Zero out the pointer fields of PGresult so that these mistakes are more
easily catched, per discussion.
---
 src/bin/pg_dump/pg_dump.c      | 7 +++----
 src/interfaces/libpq/fe-exec.c | 8 +++++++-
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 950d47a44cb..a32af2846ac 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -12,7 +12,7 @@
  *	by PostgreSQL
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.434 2006/05/26 23:48:54 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.435 2006/05/28 17:23:29 alvherre Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1445,8 +1445,6 @@ dumpStdStrings(Archive *AH)
 
 		check_sql_result(res, g_conn, qry->data, PGRES_TUPLES_OK);
 
-		PQclear(res);
-
 		resetPQExpBuffer(qry);
 
 		std_strings = (strcmp(PQgetvalue(res, 0, 0), "on") == 0);
@@ -1454,7 +1452,8 @@ dumpStdStrings(Archive *AH)
 		appendStringLiteral(qry, PQgetvalue(res, 0, 0), true, !std_strings);
 		appendPQExpBuffer(qry, ";\n");
 		puts(PQgetvalue(res, 0, 0));
-		
+
+		PQclear(res);
 	}
 	
 	ArchiveEntry(AH, nilCatalogId, createDumpId(),
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c
index 7b999c85330..71ba05fbca6 100644
--- a/src/interfaces/libpq/fe-exec.c
+++ b/src/interfaces/libpq/fe-exec.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/interfaces/libpq/fe-exec.c,v 1.184 2006/05/23 22:13:19 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/interfaces/libpq/fe-exec.c,v 1.185 2006/05/28 17:23:29 alvherre Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -364,6 +364,12 @@ PQclear(PGresult *res)
 	if (res->tuples)
 		free(res->tuples);
 
+	/* zero out the pointer fields to catch programming errors */
+	res->attDescs = NULL;
+	res->tuples = NULL;
+	res->errFields = NULL;
+	/* res->curBlock was zeroed out earlier */
+
 	/* Free the PGresult structure itself */
 	free(res);
 }
-- 
GitLab