diff options
-rw-r--r-- | src/interfaces/libpq/fe-connect.c | 3 | ||||
-rw-r--r-- | src/interfaces/libpq/fe-exec.c | 3 | ||||
-rw-r--r-- | src/interfaces/libpq/fe-misc.c | 26 | ||||
-rw-r--r-- | src/interfaces/libpq/fe-protocol3.c | 9 | ||||
-rw-r--r-- | src/interfaces/libpq/libpq-int.h | 4 |
5 files changed, 25 insertions, 20 deletions
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 55f9b2ffc7..307b8053e8 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -1581,7 +1581,8 @@ keep_going: /* We will come back to here until there is * needed to hold the whole message; see notes in * pqParseInput3. */ - if (pqCheckInBufferSpace(conn->inCursor + msgLength, conn)) + if (pqCheckInBufferSpace(conn->inCursor + (size_t) msgLength, + conn)) goto error_return; /* We'll come back when there is more data */ return PGRES_POLLING_READING; diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index c3bc843d02..97bfcf990f 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -1685,7 +1685,8 @@ PQputCopyData(PGconn *conn, const char *buffer, int nbytes) { if (pqFlush(conn) < 0) return -1; - if (pqCheckOutBufferSpace(conn->outCount + 5 + nbytes, conn)) + if (pqCheckOutBufferSpace(conn->outCount + 5 + (size_t) nbytes, + conn)) return pqIsnonblocking(conn) ? 0 : -1; } /* Send the data (too simple to delegate to fe-protocol files) */ diff --git a/src/interfaces/libpq/fe-misc.c b/src/interfaces/libpq/fe-misc.c index 0ca46cdb11..dcb227a7ac 100644 --- a/src/interfaces/libpq/fe-misc.c +++ b/src/interfaces/libpq/fe-misc.c @@ -278,12 +278,12 @@ pqPutInt(int value, size_t bytes, PGconn *conn) * Returns 0 on success, EOF if failed to enlarge buffer */ int -pqCheckOutBufferSpace(int bytes_needed, PGconn *conn) +pqCheckOutBufferSpace(size_t bytes_needed, PGconn *conn) { int newsize = conn->outBufSize; char *newbuf; - if (bytes_needed <= newsize) + if (bytes_needed <= (size_t) newsize) return 0; /* @@ -296,9 +296,9 @@ pqCheckOutBufferSpace(int bytes_needed, PGconn *conn) do { newsize *= 2; - } while (bytes_needed > newsize && newsize > 0); + } while (newsize > 0 && bytes_needed > (size_t) newsize); - if (bytes_needed <= newsize) + if (newsize > 0 && bytes_needed <= (size_t) newsize) { newbuf = realloc(conn->outBuffer, newsize); if (newbuf) @@ -314,9 +314,9 @@ pqCheckOutBufferSpace(int bytes_needed, PGconn *conn) do { newsize += 8192; - } while (bytes_needed > newsize && newsize > 0); + } while (newsize > 0 && bytes_needed > (size_t) newsize); - if (bytes_needed <= newsize) + if (newsize > 0 && bytes_needed <= (size_t) newsize) { newbuf = realloc(conn->outBuffer, newsize); if (newbuf) @@ -341,12 +341,12 @@ pqCheckOutBufferSpace(int bytes_needed, PGconn *conn) * Returns 0 on success, EOF if failed to enlarge buffer */ int -pqCheckInBufferSpace(int bytes_needed, PGconn *conn) +pqCheckInBufferSpace(size_t bytes_needed, PGconn *conn) { int newsize = conn->inBufSize; char *newbuf; - if (bytes_needed <= newsize) + if (bytes_needed <= (size_t) newsize) return 0; /* @@ -359,9 +359,9 @@ pqCheckInBufferSpace(int bytes_needed, PGconn *conn) do { newsize *= 2; - } while (bytes_needed > newsize && newsize > 0); + } while (newsize > 0 && bytes_needed > (size_t) newsize); - if (bytes_needed <= newsize) + if (newsize > 0 && bytes_needed <= (size_t) newsize) { newbuf = realloc(conn->inBuffer, newsize); if (newbuf) @@ -377,9 +377,9 @@ pqCheckInBufferSpace(int bytes_needed, PGconn *conn) do { newsize += 8192; - } while (bytes_needed > newsize && newsize > 0); + } while (newsize > 0 && bytes_needed > (size_t) newsize); - if (bytes_needed <= newsize) + if (newsize > 0 && bytes_needed <= (size_t) newsize) { newbuf = realloc(conn->inBuffer, newsize); if (newbuf) @@ -572,7 +572,7 @@ pqReadData(PGconn *conn) */ if (conn->inBufSize - conn->inEnd < 8192) { - if (pqCheckInBufferSpace(conn->inEnd + 8192, conn)) + if (pqCheckInBufferSpace(conn->inEnd + (size_t) 8192, conn)) { /* * We don't insist that the enlarge worked, but we need some room diff --git a/src/interfaces/libpq/fe-protocol3.c b/src/interfaces/libpq/fe-protocol3.c index 152f05694b..c07a827a1a 100644 --- a/src/interfaces/libpq/fe-protocol3.c +++ b/src/interfaces/libpq/fe-protocol3.c @@ -115,7 +115,8 @@ pqParseInput3(PGconn *conn) * recovery strategy if we are unable to make the buffer big * enough. */ - if (pqCheckInBufferSpace(conn->inCursor + msgLength, conn)) + if (pqCheckInBufferSpace(conn->inCursor + (size_t) msgLength, + conn)) { /* * XXX add some better recovery code... plan is to skip over @@ -1310,7 +1311,8 @@ getCopyDataMessage(PGconn *conn) * Before returning, enlarge the input buffer if needed to hold * the whole message. See notes in parseInput. */ - if (pqCheckInBufferSpace(conn->inCursor + msgLength - 4, conn)) + if (pqCheckInBufferSpace(conn->inCursor + (size_t) msgLength - 4, + conn)) { /* * XXX add some better recovery code... plan is to skip over @@ -1745,7 +1747,8 @@ pqFunctionCall3(PGconn *conn, Oid fnid, * Before looping, enlarge the input buffer if needed to hold the * whole message. See notes in parseInput. */ - if (pqCheckInBufferSpace(conn->inCursor + msgLength, conn)) + if (pqCheckInBufferSpace(conn->inCursor + (size_t) msgLength, + conn)) { /* * XXX add some better recovery code... plan is to skip over diff --git a/src/interfaces/libpq/libpq-int.h b/src/interfaces/libpq/libpq-int.h index 38c06d4bb7..4af13880a7 100644 --- a/src/interfaces/libpq/libpq-int.h +++ b/src/interfaces/libpq/libpq-int.h @@ -511,8 +511,8 @@ extern PGresult *pqFunctionCall3(PGconn *conn, Oid fnid, * Get, EOF merely means the buffer is exhausted, not that there is * necessarily any error. */ -extern int pqCheckOutBufferSpace(int bytes_needed, PGconn *conn); -extern int pqCheckInBufferSpace(int bytes_needed, PGconn *conn); +extern int pqCheckOutBufferSpace(size_t bytes_needed, PGconn *conn); +extern int pqCheckInBufferSpace(size_t bytes_needed, PGconn *conn); extern int pqGetc(char *result, PGconn *conn); extern int pqPutc(char c, PGconn *conn); extern int pqGets(PQExpBuffer buf, PGconn *conn); |