From f06dad6860f209da422790ab7b9df36857e8c0f3 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Tue, 14 Aug 2012 11:05:29 +1000 Subject: [PATCH] 3360. [bug] 'host -w' could die. [RT #18723] --- CHANGES | 2 ++ lib/isc/pthreads/condition.c | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index a11c6874fe..9453c5088e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,5 @@ +3360. [bug] 'host -w' could die. [RT #18723] + 3359. [bug] An improperly-formed TSIG secret could cause a memory leak. [RT #30607] diff --git a/lib/isc/pthreads/condition.c b/lib/isc/pthreads/condition.c index 50281a2b87..ca33e66cf4 100644 --- a/lib/isc/pthreads/condition.c +++ b/lib/isc/pthreads/condition.c @@ -43,7 +43,14 @@ isc_condition_waituntil(isc_condition_t *c, isc_mutex_t *m, isc_time_t *t) { * POSIX defines a timespec's tv_sec as time_t. */ result = isc_time_secondsastimet(t, &ts.tv_sec); - if (result != ISC_R_SUCCESS) + + /* + * If we have a range error ts.tv_sec is most probably a signed + * 32 bit value. Set ts.tv_sec to INT_MAX. This is a kludge. + */ + if (result == ISC_R_RANGE) + ts.tv_sec = INT_MAX; + else if (result != ISC_R_SUCCESS) return (result); /*!