70 lines
2.1 KiB
Diff
70 lines
2.1 KiB
Diff
|
Index: contrib/bind9/lib/dns/rdata.c
|
||
|
===================================================================
|
||
|
--- contrib/bind9/lib/dns/rdata.c.orig
|
||
|
+++ contrib/bind9/lib/dns/rdata.c
|
||
|
@@ -329,8 +329,8 @@
|
||
|
|
||
|
REQUIRE(rdata1 != NULL);
|
||
|
REQUIRE(rdata2 != NULL);
|
||
|
- REQUIRE(rdata1->data != NULL);
|
||
|
- REQUIRE(rdata2->data != NULL);
|
||
|
+ REQUIRE(rdata1->length == 0 || rdata1->data != NULL);
|
||
|
+ REQUIRE(rdata2->length == 0 || rdata2->data != NULL);
|
||
|
REQUIRE(DNS_RDATA_VALIDFLAGS(rdata1));
|
||
|
REQUIRE(DNS_RDATA_VALIDFLAGS(rdata2));
|
||
|
|
||
|
@@ -360,8 +360,8 @@
|
||
|
|
||
|
REQUIRE(rdata1 != NULL);
|
||
|
REQUIRE(rdata2 != NULL);
|
||
|
- REQUIRE(rdata1->data != NULL);
|
||
|
- REQUIRE(rdata2->data != NULL);
|
||
|
+ REQUIRE(rdata1->length == 0 || rdata1->data != NULL);
|
||
|
+ REQUIRE(rdata2->length == 0 || rdata2->data != NULL);
|
||
|
REQUIRE(DNS_RDATA_VALIDFLAGS(rdata1));
|
||
|
REQUIRE(DNS_RDATA_VALIDFLAGS(rdata2));
|
||
|
|
||
|
Index: contrib/bind9/lib/dns/rdataslab.c
|
||
|
===================================================================
|
||
|
--- contrib/bind9/lib/dns/rdataslab.c.orig
|
||
|
+++ contrib/bind9/lib/dns/rdataslab.c
|
||
|
@@ -126,6 +126,11 @@
|
||
|
dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx,
|
||
|
isc_region_t *region, unsigned int reservelen)
|
||
|
{
|
||
|
+ /*
|
||
|
+ * Use &removed as a sentinal pointer for duplicate
|
||
|
+ * rdata as rdata.data == NULL is valid.
|
||
|
+ */
|
||
|
+ static unsigned char removed;
|
||
|
struct xrdata *x;
|
||
|
unsigned char *rawbuf;
|
||
|
#if DNS_RDATASET_FIXED
|
||
|
@@ -169,6 +174,7 @@
|
||
|
INSIST(result == ISC_R_SUCCESS);
|
||
|
dns_rdata_init(&x[i].rdata);
|
||
|
dns_rdataset_current(rdataset, &x[i].rdata);
|
||
|
+ INSIST(x[i].rdata.data != &removed);
|
||
|
#if DNS_RDATASET_FIXED
|
||
|
x[i].order = i;
|
||
|
#endif
|
||
|
@@ -201,8 +207,7 @@
|
||
|
*/
|
||
|
for (i = 1; i < nalloc; i++) {
|
||
|
if (compare_rdata(&x[i-1].rdata, &x[i].rdata) == 0) {
|
||
|
- x[i-1].rdata.data = NULL;
|
||
|
- x[i-1].rdata.length = 0;
|
||
|
+ x[i-1].rdata.data = &removed;
|
||
|
#if DNS_RDATASET_FIXED
|
||
|
/*
|
||
|
* Preserve the least order so A, B, A -> A, B
|
||
|
@@ -292,7 +297,7 @@
|
||
|
#endif
|
||
|
|
||
|
for (i = 0; i < nalloc; i++) {
|
||
|
- if (x[i].rdata.data == NULL)
|
||
|
+ if (x[i].rdata.data == &removed)
|
||
|
continue;
|
||
|
#if DNS_RDATASET_FIXED
|
||
|
offsettable[x[i].order] = rawbuf - offsetbase;
|