5 p->size = p->rindex = AVAHI_DNS_PACKET_HEADER_SIZE;
6 p->max_size = max_size;
12 return p->max_size - p->size;
15 +size_t avahi_dns_packet_reserve_size(AvahiDnsPacket *p, size_t res_size) {
18 + assert(p->size + p->res_size <= p->max_size);
20 + if ((p->size + p->res_size + res_size) <= p->max_size)
21 + p->res_size += res_size;
26 +size_t avahi_dns_packet_reserved_space(AvahiDnsPacket *p) {
29 + assert(p->size + p->res_size <= p->max_size);
31 + return p->max_size - p->size - p->res_size;
34 int avahi_rdata_parse(AvahiRecord *record, const void* rdata, size_t size) {
37 --- a/avahi-core/dns.h
38 +++ b/avahi-core/dns.h
40 #define AVAHI_DNS_PACKET_SIZE_MAX (AVAHI_DNS_PACKET_HEADER_SIZE + 256 + 2 + 2 + 4 + 2 + AVAHI_DNS_RDATA_MAX)
42 typedef struct AvahiDnsPacket {
43 - size_t size, rindex, max_size;
44 + size_t size, rindex, max_size, res_size;
45 AvahiHashmap *name_table; /* for name compression */
50 int avahi_dns_packet_is_empty(AvahiDnsPacket *p);
51 size_t avahi_dns_packet_space(AvahiDnsPacket *p);
52 +size_t avahi_dns_packet_reserve_size(AvahiDnsPacket *p, size_t res_size);
53 +size_t avahi_dns_packet_reserved_space(AvahiDnsPacket *p);
55 #define AVAHI_DNS_FIELD_ID 0
56 #define AVAHI_DNS_FIELD_FLAGS 1
57 --- a/avahi-core/probe-sched.c
58 +++ b/avahi-core/probe-sched.c
60 avahi_record_get_estimate_size(pj->record);
63 - if (size > avahi_dns_packet_space(p))
64 + if (size > avahi_dns_packet_reserved_space(p))
67 /* Create the probe query */
69 b = !!avahi_dns_packet_append_key(p, k, 0);
72 + /* reserve size for record data */
73 + avahi_dns_packet_reserve_size(p, avahi_record_get_estimate_size(pj->record));
75 /* Mark this job for addition to the packet */
81 /* This job wouldn't fit in */
82 - if (avahi_record_get_estimate_size(pj->record) > avahi_dns_packet_space(p))
83 + if (avahi_record_get_estimate_size(pj->record) > avahi_dns_packet_reserved_space(p))
86 + /* reserve size for record data */
87 + avahi_dns_packet_reserve_size(p, avahi_record_get_estimate_size(pj->record));
89 /* Mark this job for addition to the packet */