]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Merge clean up
authorRalph Dolmans <ralph@nlnetlabs.nl>
Mon, 9 Sep 2019 15:13:08 +0000 (17:13 +0200)
committerRalph Dolmans <ralph@nlnetlabs.nl>
Mon, 9 Sep 2019 15:13:08 +0000 (17:13 +0200)
- revert dname2str off by one fix
- fix str2dname off by one at right location

libunbound/context.c
services/authzone.c
sldns/str2wire.c
util/data/dname.c
util/data/packed_rrset.c
util/data/packed_rrset.h

index cb09f1d945c732ca5f335e01d12efe207c33f360..d96722263c78e5f56122d39d1313756356371b43 100644 (file)
@@ -77,7 +77,7 @@ context_finalize(struct ub_ctx* ctx)
                return UB_NOMEM;
        if(!local_zones_apply_cfg(ctx->local_zones, cfg))
                return UB_INITFAIL;
-       if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1i, &is_rpz))
+       if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1, &is_rpz))
                return UB_INITFAIL;
        if(!slabhash_is_size(ctx->env->msg_cache, cfg->msg_cache_size,
                cfg->msg_cache_slabs)) {
index 926c6ef0389270eb4a47d62cb391840b8350ee93..b49f7409ad22835e21ca769f3bbc3ce0178a000f 100644 (file)
@@ -723,10 +723,58 @@ rrsig_rdata_get_type_covered(uint8_t* rdata, size_t rdatalen)
 static int
 rrset_remove_rr(struct auth_rrset* rrset, size_t index)
 {
-       struct packed_rrset_data* d =
-               packed_rrset_remove_rr(rrset->data, index, NULL);
-       if(!d)
+       struct packed_rrset_data* d, *old = rrset->data;
+       size_t i;
+       if(index >= old->count + old->rrsig_count)
+               return 0; /* index out of bounds */
+       d = (struct packed_rrset_data*)calloc(1, packed_rrset_sizeof(old) - (
+               sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t) +
+               old->rr_len[index]));
+       if(!d) {
+               log_err("malloc failure");
                return 0;
+       }
+       d->ttl = old->ttl;
+       d->count = old->count;
+       d->rrsig_count = old->rrsig_count;
+       if(index < d->count) d->count--;
+       else d->rrsig_count--;
+       d->trust = old->trust;
+       d->security = old->security;
+
+       /* set rr_len, needed for ptr_fixup */
+       d->rr_len = (size_t*)((uint8_t*)d +
+               sizeof(struct packed_rrset_data));
+       if(index > 0)
+               memmove(d->rr_len, old->rr_len, (index)*sizeof(size_t));
+       if(index+1 < old->count+old->rrsig_count)
+               memmove(&d->rr_len[index], &old->rr_len[index+1],
+               (old->count+old->rrsig_count - (index+1))*sizeof(size_t));
+       packed_rrset_ptr_fixup(d);
+
+       /* move over ttls */
+       if(index > 0)
+               memmove(d->rr_ttl, old->rr_ttl, (index)*sizeof(time_t));
+       if(index+1 < old->count+old->rrsig_count)
+               memmove(&d->rr_ttl[index], &old->rr_ttl[index+1],
+               (old->count+old->rrsig_count - (index+1))*sizeof(time_t));
+       
+       /* move over rr_data */
+       for(i=0; i<d->count+d->rrsig_count; i++) {
+               size_t oldi;
+               if(i < index) oldi = i;
+               else oldi = i+1;
+               memmove(d->rr_data[i], old->rr_data[oldi], d->rr_len[i]);
+       }
+
+       /* recalc ttl (lowest of remaining RR ttls) */
+       if(d->count + d->rrsig_count > 0)
+               d->ttl = d->rr_ttl[0];
+       for(i=0; i<d->count+d->rrsig_count; i++) {
+               if(d->rr_ttl[i] < d->ttl)
+                       d->ttl = d->rr_ttl[i];
+       }
+
        free(rrset->data);
        rrset->data = d;
        return 1;
index f94ba890c74c46d65744e12af7ebbe56164074aa..e6dab6477174b8b3bf27c3b5a3684010bead4081 100644 (file)
@@ -80,7 +80,7 @@ static int sldns_str2wire_dname_buf_rel(const char* str, uint8_t* buf,
        for (s = str; *s; s++, q++) {
                if (q >= buf + *olen)
                        return RET_ERR(LDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL, q-buf);
-               if (q > buf + LDNS_MAX_DOMAINLEN)
+               if (q >= buf + LDNS_MAX_DOMAINLEN)
                        return RET_ERR(LDNS_WIREPARSE_ERR_DOMAINNAME_OVERFLOW, q-buf);
                switch (*s) {
                case '.':
@@ -117,7 +117,7 @@ static int sldns_str2wire_dname_buf_rel(const char* str, uint8_t* buf,
                if(rel) *rel = 1;
                if (q >= buf + *olen)
                        return RET_ERR(LDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL, q-buf);
-               if (q > buf + LDNS_MAX_DOMAINLEN) {
+               if (q >= buf + LDNS_MAX_DOMAINLEN) {
                        return RET_ERR(LDNS_WIREPARSE_ERR_DOMAINNAME_OVERFLOW, q-buf);
                }
                 if (label_len > LDNS_MAX_LABELLEN) {
@@ -165,7 +165,7 @@ int sldns_str2wire_dname_buf_origin(const char* str, uint8_t* buf, size_t* len,
 
 uint8_t* sldns_str2wire_dname(const char* str, size_t* len)
 {
-       uint8_t dname[LDNS_MAX_DOMAINLEN];
+       uint8_t dname[LDNS_MAX_DOMAINLEN+1];
        *len = sizeof(dname);
        if(sldns_str2wire_dname_buf(str, dname, len) == 0) {
                uint8_t* r = (uint8_t*)malloc(*len);
index cf3545f7c37c8025a7c9bcad79bcf0eef0e6873b..f025bf699d7671d42a085551a928e7b70010420f 100644 (file)
@@ -597,7 +597,7 @@ void dname_str(uint8_t* dname, char* str)
                        return;
                }
                len += lablen+1;
-               if(len >= LDNS_MAX_DOMAINLEN) {
+               if(len >= LDNS_MAX_DOMAINLEN-1) {
                        *s++ = '&';
                        *s = 0;
                        return;
index 9d21b9cc9903ba0322bb0c5b8a3b7757ceac7f72..7f3feb1d0dd758bc5407bbe1519979f624231a82 100644 (file)
@@ -402,67 +402,3 @@ packed_rrset_find_rr(struct packed_rrset_data* d, uint8_t* rdata, size_t len,
        }
        return 0;
 }
-
-struct packed_rrset_data*
-packed_rrset_remove_rr(struct packed_rrset_data* old, size_t index,
-       struct regional* region)
-{
-       struct packed_rrset_data* d;
-       size_t i;
-       if(index >= old->count + old->rrsig_count)
-               return NULL; /* index out of bounds */
-       if(region)
-               d = (struct packed_rrset_data*)regional_alloc(region,
-                       packed_rrset_sizeof(old) - ( sizeof(size_t) +
-                       sizeof(uint8_t*) + sizeof(time_t) + old->rr_len[index]));
-       else
-               d = (struct packed_rrset_data*)calloc(1,
-                       packed_rrset_sizeof(old) - ( sizeof(size_t) +
-                       sizeof(uint8_t*) + sizeof(time_t) + old->rr_len[index]));
-       if(!d) {
-               log_err("malloc failure");
-               return NULL;
-       }
-       d->ttl = old->ttl;
-       d->count = old->count;
-       d->rrsig_count = old->rrsig_count;
-       if(index < d->count) d->count--;
-       else d->rrsig_count--;
-       d->trust = old->trust;
-       d->security = old->security;
-
-       /* set rr_len, needed for ptr_fixup */
-       d->rr_len = (size_t*)((uint8_t*)d +
-               sizeof(struct packed_rrset_data));
-       if(index > 0)
-               memmove(d->rr_len, old->rr_len, (index)*sizeof(size_t));
-       if(index+1 < old->count+old->rrsig_count)
-               memmove(&d->rr_len[index], &old->rr_len[index+1],
-               (old->count+old->rrsig_count - (index+1))*sizeof(size_t));
-       packed_rrset_ptr_fixup(d);
-
-       /* move over ttls */
-       if(index > 0)
-               memmove(d->rr_ttl, old->rr_ttl, (index)*sizeof(time_t));
-       if(index+1 < old->count+old->rrsig_count)
-               memmove(&d->rr_ttl[index], &old->rr_ttl[index+1],
-               (old->count+old->rrsig_count - (index+1))*sizeof(time_t));
-       
-       /* move over rr_data */
-       for(i=0; i<d->count+d->rrsig_count; i++) {
-               size_t oldi;
-               if(i < index) oldi = i;
-               else oldi = i+1;
-               memmove(d->rr_data[i], old->rr_data[oldi], d->rr_len[i]);
-       }
-
-       /* recalc ttl (lowest of remaining RR ttls) */
-       if(d->count + d->rrsig_count > 0)
-               d->ttl = d->rr_ttl[0];
-       for(i=0; i<d->count+d->rrsig_count; i++) {
-               if(d->rr_ttl[i] < d->ttl)
-                       d->ttl = d->rr_ttl[i];
-       }
-
-       return d;
-}
index cb2664c050ab1759b6d6ec707fe4f6939bfbbfa1..59693dbf60d3f4226d56a1f07914f75b9e56bdaf 100644 (file)
@@ -458,16 +458,4 @@ int
 packed_rrset_find_rr(struct packed_rrset_data* d, uint8_t* rdata, size_t len,
        size_t* index);
 
-/**
- * Remove RR from packed rrset
- * @param old: packed rrset containing RR to remove
- * @param index: index of RR to remove
- * @param region: region to use for allocation of new packet RR. Malloc used if
- *     NULL
- * @return pointer to newly allocated packed rrset
- */
-struct packed_rrset_data*
-packed_rrset_remove_rr(struct packed_rrset_data* old, size_t index,
-       struct regional* region);
-
 #endif /* UTIL_DATA_PACKED_RRSET_H */