From 83d2840b6f1a5ec898e441be148ddd3211f11583 Mon Sep 17 00:00:00 2001 From: Bob Halley Date: Tue, 12 Sep 2000 19:26:40 +0000 Subject: [PATCH] fix erroneous isc_bitstring_copy() REQUIRE --- CHANGES | 4 ++++ lib/isc/bitstring.c | 18 +++++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/CHANGES b/CHANGES index 9e08e33107..f9f3734e2f 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ + 445. [bug] Doing a 0 bit isc_bitstring_copy() of an lsb0 + bitstring triggered a REQUIRE statement. The REQUIRE + statement was incorrect. [RT #297] + 444. [func] "recursion denied" messages are always logged at debug level 1, now, rather than sometimes at ERROR. This silences these warnings in the usual case, where diff --git a/lib/isc/bitstring.c b/lib/isc/bitstring.c index 4f6a609ded..10a626d15d 100644 --- a/lib/isc/bitstring.c +++ b/lib/isc/bitstring.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: bitstring.c,v 1.7 2000/08/01 01:29:15 tale Exp $ */ +/* $Id: bitstring.c,v 1.8 2000/09/12 19:26:40 halley Exp $ */ #include @@ -90,20 +90,20 @@ isc_bitstring_copy(isc_bitstring_t *source, unsigned int sbitpos, REQUIRE(VALID_BITSTRING(source)); REQUIRE(VALID_BITSTRING(target)); if (source->lsb0) { - REQUIRE(sbitpos < source->length); - sbitpos = PADDED(source->size) - sbitpos - 1; - REQUIRE(sbitpos >= n - 1); - sbitpos -= n - 1; + REQUIRE(sbitpos <= source->length); + sbitpos = PADDED(source->size) - sbitpos; + REQUIRE(sbitpos >= n); + sbitpos -= n; } else REQUIRE(sbitpos + n <= source->length); tlast = tbitpos + n; if (target->lsb0) { REQUIRE(tbitpos <= target->length); - tbitpos = PADDED(target->size) - tbitpos - 1; - REQUIRE(tbitpos >= n - 1); - tbitpos -= n - 1; + tbitpos = PADDED(target->size) - tbitpos; + REQUIRE(tbitpos >= n); + tbitpos -= n; } else - REQUIRE(tlast<= target->size); + REQUIRE(tlast <= target->size); if (tlast > target->length) target->length = tlast;