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