Initialize dblink remoteConn struct in all cases
authorJoe Conway <[email protected]>
Thu, 28 May 2020 17:45:06 +0000 (13:45 -0400)
committerJoe Conway <[email protected]>
Thu, 28 May 2020 17:45:06 +0000 (13:45 -0400)
Two of the members of rconn were left uninitialized. When
dblink_open() is called without an outer transaction it
handles the initialization for us, but with an outer
transaction it does not. Arrange for initialization
in all cases. Backpatch to all supported versions.

Reported-by: Alexander Lakhin
Discussion: https://www.postgresql.org/message-id/flat/9bd0744f-5f04-c778-c5b3-809efe9c30c7%40joeconway.com#c545909a41664991aca60c4d70a10ce7

contrib/dblink/dblink.c

index 81136b131c992a54039f8b61cf2dc2938e99e228..105f8fb51725c02ff4b2f23d2d133e71e3fd3dc8 100644 (file)
@@ -272,8 +272,13 @@ dblink_connect(PG_FUNCTION_ARGS)
        conname_or_str = text_to_cstring(PG_GETARG_TEXT_PP(0));
 
    if (connname)
+   {
        rconn = (remoteConn *) MemoryContextAlloc(TopMemoryContext,
                                                  sizeof(remoteConn));
+       rconn->conn = NULL;
+       rconn->openCursorCount = 0;
+       rconn->newXactForCursor = false;
+   }
 
    /* first check for valid foreign data server */
    connstr = get_connect_string(conname_or_str);