/* buffer too short */
unit_assert(dname_has_label((uint8_t*)"\02ab\01c\0", 5, (uint8_t*)"\0") == 0);
unit_assert(dname_has_label((uint8_t*)"\1a\0", 2, (uint8_t*)"\0") == 0);
+ unit_assert(dname_has_label((uint8_t*)"\0", 0, (uint8_t*)"\0") == 0);
unit_assert(dname_has_label((uint8_t*)"\02ab\01c", 4, (uint8_t*)"\01c") == 0);
unit_assert(dname_has_label((uint8_t*)"\02ab\03qwe\06oqieur\03def\01c\0", 19, (uint8_t*)"\01c") == 0);
int
dname_has_label(uint8_t* dname, size_t dnamelen, uint8_t* label)
{
- size_t len = *dname;
+ size_t len;
+
+ /* 1 byte needed for the label length */
+ if(dnamelen < 1)
+ return 0;
+
+ len = *dname;
while(len <= dnamelen) {
if(!(*dname)) {
if(*dname == *label)