g_assert(p);
g_assert(b);
g_assert(l);
-
+
if (!(d = flx_dns_packet_extend(p, l)))
return NULL;
}
default:
- if (!(data = flx_dns_packet_get_rptr(p)) ||
- flx_dns_packet_skip(p, rdlength) < 0)
- return NULL;
+
+ if (rdlength > 0) {
+
+ if (!(data = flx_dns_packet_get_rptr(p)) ||
+ flx_dns_packet_skip(p, rdlength) < 0)
+ return NULL;
+ } else
+ data = NULL;
break;
}
memcpy(ptr_name, r->data, r->size);
ptr_name[r->size] = 0;
- if (!flx_dns_packet_append_uint16(p, strlen(ptr_name)) ||
+ if (!flx_dns_packet_append_uint16(p, strlen(ptr_name)+1) ||
!flx_dns_packet_append_name(p, ptr_name))
return NULL;
memcpy(name, r->data+6, r->size-6);
name[r->size-6] = 0;
- if (!flx_dns_packet_append_uint16(p, strlen(name+6)) ||
+ if (!flx_dns_packet_append_uint16(p, strlen(name+6)+1+6) ||
!flx_dns_packet_append_bytes(p, r->data, 6) ||
!flx_dns_packet_append_name(p, name))
return NULL;
default:
if (!flx_dns_packet_append_uint16(p, r->size) ||
- !flx_dns_packet_append_bytes(p, r->data, r->size))
+ (r->size != 0 && !flx_dns_packet_append_bytes(p, r->data, r->size)))
return NULL;
}