--- postgresql-7.3.4-orig/src/interfaces/libpq/fe-exec.c Wed Sep 4 13:31:47 2002 +++ postgresql-7.3.4/src/interfaces/libpq/fe-exec.c Wed Jul 30 16:04:20 2003 @@ -365,6 +365,8 @@ PGresult *result; result = (PGresult *) malloc(sizeof(PGresult)); + if (result == NULL) + return NULL; result->xconn = conn; /* might be NULL */ result->ntups = 0; @@ -966,8 +968,12 @@ if (pqGets(&conn->workBuffer, conn)) return; if (conn->result == NULL) + { conn->result = PQmakeEmptyPGresult(conn, PGRES_COMMAND_OK); + if (conn->result == NULL) + return; + } strncpy(conn->result->cmdStatus, conn->workBuffer.data, CMDSTATUS_LEN); conn->asyncStatus = PGASYNC_READY; @@ -994,8 +1000,12 @@ DONOTICE(conn, noticeWorkspace); } if (conn->result == NULL) + { conn->result = PQmakeEmptyPGresult(conn, PGRES_EMPTY_QUERY); + if (conn->result == NULL) + return; + } conn->asyncStatus = PGASYNC_READY; break; case 'K': /* secret key data from the backend */ @@ -1113,6 +1123,8 @@ int i; result = PQmakeEmptyPGresult(conn, PGRES_TUPLES_OK); + if (result == NULL) + return EOF; /* parseInput already read the 'T' label. */ /* the next two bytes are the number of fields */ @@ -1128,6 +1140,11 @@ { result->attDescs = (PGresAttDesc *) pqResultAlloc(result, nfields * sizeof(PGresAttDesc), TRUE); + if (result->attDescs == NULL) + { + PQclear(result); + return EOF; + } MemSet((char *) result->attDescs, 0, nfields * sizeof(PGresAttDesc)); } @@ -1209,7 +1226,11 @@ nbytes = (nfields + BYTELEN - 1) / BYTELEN; /* malloc() only for unusually large field counts... */ if (nbytes > sizeof(std_bitmap)) + { bitmap = (char *) malloc(nbytes); + if (bitmap == NULL) + goto outOfMemory; + } if (pqGetnchar(bitmap, nbytes, conn)) goto EOFexit; @@ -1525,6 +1546,9 @@ */ newNotify = (PGnotify *) malloc(sizeof(PGnotify) + strlen(conn->workBuffer.data) +1); + if (newNotify == NULL) + return EOF; + newNotify->relname = (char *) newNotify + sizeof(PGnotify); strcpy(newNotify->relname, conn->workBuffer.data); newNotify->be_pid = be_pid;