diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index 511f891393..cf45cb882f 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -1393,6 +1393,12 @@ pg_SSPI_recvauth(Port *port) (errcode(ERRCODE_PROTOCOL_VIOLATION), errmsg("expected SSPI response, got message type %d", mtype))); + if (sspictx != NULL) + { + DeleteSecurityContext(sspictx); + free(sspictx); + } + FreeCredentialsHandle(&sspicred); return STATUS_ERROR; } @@ -1402,6 +1408,12 @@ pg_SSPI_recvauth(Port *port) { /* EOF - pq_getmessage already logged error */ pfree(buf.data); + if (sspictx != NULL) + { + DeleteSecurityContext(sspictx); + free(sspictx); + } + FreeCredentialsHandle(&sspicred); return STATUS_ERROR; } @@ -2517,6 +2529,7 @@ InitializeLDAPConnection(Port *port, LDAP **ldap) (errmsg("could not load function _ldap_start_tls_sA in wldap32.dll"), errdetail("LDAP over SSL is not supported on this platform."))); ldap_unbind(*ldap); + FreeLibrary(ldaphandle); return STATUS_ERROR; } diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.c index 30b07303ff..e8911a9999 100644 --- a/src/backend/port/win32_shmem.c +++ b/src/backend/port/win32_shmem.c @@ -576,6 +576,7 @@ pgwin32_ReserveSharedMemoryRegion(HANDLE hChild) */ elog(LOG, "reserved shared memory region got incorrect address %p, expected %p", address, ShmemProtectiveRegion); + VirtualFreeEx(hChild, address, 0, MEM_RELEASE); return false; } @@ -592,6 +593,7 @@ pgwin32_ReserveSharedMemoryRegion(HANDLE hChild) { elog(LOG, "reserved shared memory region got incorrect address %p, expected %p", address, UsedShmemSegAddr); + VirtualFreeEx(hChild, address, 0, MEM_RELEASE); return false; } diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 7a92dac525..8c10bbbabc 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -4719,6 +4719,8 @@ retry: if (cmdLine[sizeof(cmdLine) - 2] != '\0') { elog(LOG, "subprocess command line too long"); + UnmapViewOfFile(param); + CloseHandle(paramHandle); return -1; } @@ -4735,6 +4737,8 @@ retry: { elog(LOG, "CreateProcess call failed: %m (error code %lu)", GetLastError()); + UnmapViewOfFile(param); + CloseHandle(paramHandle); return -1; } @@ -4750,6 +4754,8 @@ retry: GetLastError()))); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); + UnmapViewOfFile(param); + CloseHandle(paramHandle); return -1; /* log made by save_backend_variables */ } @@ -4839,6 +4845,7 @@ retry: /* Don't close pi.hProcess here - the wait thread needs access to it */ CloseHandle(pi.hThread); + free(childinfo); return pi.dwProcessId; } diff --git a/src/backend/regex/rege_dfa.c b/src/backend/regex/rege_dfa.c index 5695e158a5..f62770ba37 100644 --- a/src/backend/regex/rege_dfa.c +++ b/src/backend/regex/rege_dfa.c @@ -530,6 +530,8 @@ freedfa(struct dfa *d) if (d->mallocarea != NULL) FREE(d->mallocarea); + + FREE(d); } /* diff --git a/src/backend/regex/regexec.c b/src/backend/regex/regexec.c index f7eaa76b02..cba5ecafe7 100644 --- a/src/backend/regex/regexec.c +++ b/src/backend/regex/regexec.c @@ -389,7 +389,11 @@ find(struct vars *v, /* first, a shot with the search RE */ s = newdfa(v, &v->g->search, cm, &v->dfa1); assert(!(ISERR() && s != NULL)); - NOERR(); + if (ISERR()) + { + freedfa(s); + return v->err; + } MDEBUG(("\nsearch at %ld\n", LOFF(v->start))); cold = NULL; close = shortest(v, s, v->search_start, v->search_start, v->stop, @@ -473,7 +477,11 @@ cfind(struct vars *v, int ret; s = newdfa(v, &v->g->search, cm, &v->dfa1); - NOERR(); + if (ISERR()) + { + freedfa(s); + return v->err; + } d = newdfa(v, cnfa, cm, &v->dfa2); if (ISERR()) { diff --git a/src/common/logging.c b/src/common/logging.c index c78ae793b8..982888eddb 100644 --- a/src/common/logging.c +++ b/src/common/logging.c @@ -78,11 +78,20 @@ pg_logging_init(const char *argv0) value = e + 1; if (strcmp(name, "error") == 0) + { + free(sgr_error); sgr_error = strdup(value); + } if (strcmp(name, "warning") == 0) + { + free(sgr_warning); sgr_warning = strdup(value); + } if (strcmp(name, "locus") == 0) + { + free(sgr_locus); sgr_locus = strdup(value); + } } } diff --git a/src/common/restricted_token.c b/src/common/restricted_token.c index 74ba7192a1..15ba86d1a8 100644 --- a/src/common/restricted_token.c +++ b/src/common/restricted_token.c @@ -76,6 +76,7 @@ CreateRestrictedProcess(char *cmd, PROCESS_INFORMATION *processInfo) if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &origToken)) { pg_log_error("could not open process token: error code %lu", GetLastError()); + FreeLibrary(Advapi32Handle); return 0; } @@ -89,6 +90,8 @@ CreateRestrictedProcess(char *cmd, PROCESS_INFORMATION *processInfo) 0, &dropSids[1].Sid)) { pg_log_error("could not allocate SIDs: error code %lu", GetLastError()); + CloseHandle(origToken); + FreeLibrary(Advapi32Handle); return 0; } @@ -187,6 +190,7 @@ get_restricted_token(void) } exit(x); } + free(cmdline); } #endif }