diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/libpq/pqformat.c | 6 |
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; |