summaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2014-01-30 09:41:43 -0500
committerBruce Momjian <bruce@momjian.us>2014-01-30 09:41:43 -0500
commit146604ec43bcd6f977c31775a91022cf9737daf5 (patch)
tree2b8f94e63f29c968c77e31075d3648fb9033a923 /src/interfaces/ecpg
parent571addd729a400cece396d79696adcc63387e43b (diff)
Add checks for interval overflow/underflow
New checks include input, month/day/time internal adjustments, addition, subtraction, multiplication, and negation. Also adjust docs to correctly specify interval size in bytes. Report from Rok Kralj
Diffstat (limited to 'src/interfaces/ecpg')
-rw-r--r--src/interfaces/ecpg/pgtypeslib/interval.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/interfaces/ecpg/pgtypeslib/interval.c b/src/interfaces/ecpg/pgtypeslib/interval.c
index efa775de15a..6d0926882e8 100644
--- a/src/interfaces/ecpg/pgtypeslib/interval.c
+++ b/src/interfaces/ecpg/pgtypeslib/interval.c
@@ -1036,6 +1036,9 @@ recalc:
static int
tm2interval(struct tm * tm, fsec_t fsec, interval * span)
{
+ if ((double)tm->tm_year * MONTHS_PER_YEAR + tm->tm_mon > INT_MAX ||
+ (double)tm->tm_year * MONTHS_PER_YEAR + tm->tm_mon < INT_MIN)
+ return -1;
span->month = tm->tm_year * MONTHS_PER_YEAR + tm->tm_mon;
#ifdef HAVE_INT64_TIMESTAMP
span->time = (((((((tm->tm_mday * INT64CONST(24)) +