if (r < 0)
return r;
+ if (rdlength < 4)
+ return -EBADMSG;
+
r = dns_packet_read_memdup(p, rdlength - 4,
&rr->ds.digest, &rr->ds.digest_size,
NULL);
if (r < 0)
return r;
+ if (rdlength < 2)
+ return -EBADMSG;
+
r = dns_packet_read_memdup(p, rdlength - 2,
&rr->sshfp.fingerprint, &rr->sshfp.fingerprint_size,
NULL);
if (r < 0)
return r;
+ if (rdlength < 4)
+ return -EBADMSG;
+
r = dns_packet_read_memdup(p, rdlength - 4,
&rr->dnskey.key, &rr->dnskey.key_size,
NULL);
if (r < 0)
return r;
+ if (rdlength + offset < p->rindex)
+ return -EBADMSG;
+
r = dns_packet_read_memdup(p, offset + rdlength - p->rindex,
&rr->rrsig.signature, &rr->rrsig.signature_size,
NULL);
if (r < 0)
return r;
+ if (rdlength < 3)
+ return -EBADMSG;
+
r = dns_packet_read_memdup(p, rdlength - 3,
&rr->tlsa.data, &rr->tlsa.data_size,
NULL);
if (r < 0)
return r;
+ if (rdlength + offset < p->rindex)
+ return -EBADMSG;
+
r = dns_packet_read_memdup(p,
rdlength + offset - p->rindex,
&rr->caa.value, &rr->caa.value_size, NULL);