From 54a8af058e73b452278031b4959bd2fe9be0ba0c Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 24 Sep 2005 15:34:07 +0000 Subject: [PATCH] In a machine where INT64_IS_BUSTED, we can only support 32-bit values for int8 and related types. However we might be talking to a client that has working int64; so pq_getmsgint64 really needs to check the incoming value and throw an overflow error if we can't represent it accurately. --- src/backend/libpq/pqformat.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/backend/libpq/pqformat.c b/src/backend/libpq/pqformat.c index 52144eb4c8..efbd0b1e95 100644 --- a/src/backend/libpq/pqformat.c +++ b/src/backend/libpq/pqformat.c @@ -24,7 +24,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/libpq/pqformat.c,v 1.37 2004/12/31 21:59:50 pgsql Exp $ + * $PostgreSQL: pgsql/src/backend/libpq/pqformat.c,v 1.38 2005/09/24 15:34:07 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -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; -- GitLab