summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/libpq/pqformat.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/backend/libpq/pqformat.c b/src/backend/libpq/pqformat.c
index 9db0b2d927..fb9db13ef9 100644
--- a/src/backend/libpq/pqformat.c
+++ b/src/backend/libpq/pqformat.c
@@ -501,8 +501,12 @@ pq_getmsgint64(StringInfo msg)
l32 = ntohl(l32);
#ifdef INT64_IS_BUSTED
- /* just lose the high half */
+ /* error out if incoming value is wider than 32 bits */
result = l32;
+ if ((result < 0) ? (h32 != -1) : (h32 != 0))
+ ereport(ERROR,
+ (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
+ errmsg("binary value is out of range for type bigint")));
#else
result = h32;
result <<= 32;