From: Mark Andrews Date: Tue, 14 Aug 2012 01:05:29 +0000 (+1000) Subject: 3360. [bug] 'host -w' could die. [RT #18723] X-Git-Tag: v9.10.0a1~972 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=f06dad6860f209da422790ab7b9df36857e8c0f3;p=thirdparty%2Fbind9.git 3360. [bug] 'host -w' could die. [RT #18723] --- diff --git a/CHANGES b/CHANGES index a11c6874fe1..9453c5088ec 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 50281a2b87c..ca33e66cf49 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); /*!