Skip to content

Commit 898fc15

Browse files
committed
Zero size only for non-repeating remaining data
1 parent 16da0a0 commit 898fc15

3 files changed

Lines changed: 9 additions & 6 deletions

File tree

src/rr-dict.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ typedef struct priv_getdns_rdf_special {
5454

5555
#define GETDNS_RDF_INTEGER 0x010000
5656
#define GETDNS_RDF_BINDATA 0x020000
57-
#define GETDNS_RDF_DNAME 0x060000
57+
#define GETDNS_RDF_DNAME 0x040000
5858
#define GETDNS_RDF_COMPRESSED 0x080000
5959
#define GETDNS_RDF_REPEAT 0x100000
6060

src/rr-iter.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ rdf_iter_find_nxt(priv_getdns_rdf_iter *i)
237237
i->nxt = i->pos + 1 < i->end
238238
? i->pos + gldns_read_uint16(i->pos) + 2 : i->end;
239239

240-
else if ((i->rdd_pos->type & GETDNS_RDF_DNAME) == GETDNS_RDF_DNAME)
240+
else if (i->rdd_pos->type & GETDNS_RDF_DNAME)
241241

242242
for (pos = i->pos; pos < i->end; pos += *pos + 1) {
243243
if (!*pos) {
@@ -257,8 +257,12 @@ rdf_iter_find_nxt(priv_getdns_rdf_iter *i)
257257
} else /* RDF is for remaining data */
258258
i->nxt = i->end;
259259

260-
if ( i->nxt <= i->end
261-
&& (i->nxt > i->pos || !(i->rdd_pos->type & GETDNS_RDF_REPEAT)))
260+
if ( i->nxt <= i->end &&
261+
262+
/* Empty rdata fields are only allowed in case of non-repeating
263+
* remaining data. So only the GETDNS_RDF_BINDATA bit is set.
264+
*/
265+
(i->nxt > i->pos || (i->rdd_pos->type == GETDNS_RDF_BINDATA)))
262266
return i;
263267
done:
264268
i->pos = NULL;

src/util-internal.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,8 +271,7 @@ priv_getdns_rr_iter2rr_dict(struct mem_funcs *mf, priv_getdns_rr_iter *i)
271271
default:
272272
goto rdata_error;
273273
}
274-
} else if ((rdf->rdd_pos->type & GETDNS_RDF_DNAME) ==
275-
GETDNS_RDF_DNAME) {
274+
} else if (rdf->rdd_pos->type & GETDNS_RDF_DNAME) {
276275
val_type = t_bindata;
277276

278277
bindata.data = priv_getdns_rdf_if_or_as_decompressed(

0 commit comments

Comments
 (0)