From 99f0026961c73f0cb095afaccb1478dc0f25e3ca Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Sat, 4 Jul 2015 08:09:50 +0200 Subject: [PATCH] Allow remaining data RDF to be zero size Usefull for NSECs on empty non terminals! --- src/dnssec.c | 4 +--- src/rr-iter.c | 6 +++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/dnssec.c b/src/dnssec.c index 3656a54c..1ab1d01c 100644 --- a/src/dnssec.c +++ b/src/dnssec.c @@ -701,10 +701,8 @@ static int bitmap_has_type(priv_getdns_rdf_iter *bitmap, uint16_t rr_type) uint8_t window = rr_type >> 8; uint8_t subtype = rr_type & 0xFF; - if (!bitmap) + if (!bitmap || (dptr = bitmap->pos) == (dend = bitmap->nxt)) return 0; - dptr = bitmap->pos; - dend = bitmap->nxt; /* Type Bitmap = ( Window Block # | Bitmap Length | Bitmap ) + * dptr[0] dptr[1] dptr[2:] diff --git a/src/rr-iter.c b/src/rr-iter.c index 6b68ac1c..a950483b 100644 --- a/src/rr-iter.c +++ b/src/rr-iter.c @@ -252,7 +252,7 @@ rdf_iter_find_nxt(priv_getdns_rdf_iter *i) if (!(i->nxt = i->rdd_pos->special->rdf_end( i->pkt, i->pkt_end, i->pos))) i->nxt = i->end; - } else + } else /* RDF is for remaining data */ i->nxt = i->end; if (i->nxt <= i->end) @@ -304,8 +304,8 @@ priv_getdns_rdf_iter_next(priv_getdns_rdf_iter *i) return NULL; i->rdd_pos += 1; - if ((i->pos = i->nxt) >= i->end) - goto done; /* Out of rdata */ + if ((i->pos = i->nxt) > i->end) + goto done; /* Overflow */ if (i->rdd_pos >= i->rdd_end && !(i->rdd_pos = i->rdd_repeat)) goto done; /* Remaining rdata, but out of definitions! */ if (i->rdd_pos->type == GETDNS_RDF_REPEAT)