]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Make dname_has_label's dnamelen check work with 0 length
authorRalph Dolmans <ralph@nlnetlabs.nl>
Wed, 29 Jan 2020 10:30:22 +0000 (11:30 +0100)
committerRalph Dolmans <ralph@nlnetlabs.nl>
Wed, 29 Jan 2020 10:30:22 +0000 (11:30 +0100)
testcode/unitdname.c
util/data/dname.c

index b0c3fb057034c2f4ed13bd9d3ef390e64bd9bb2a..6769127b93495142e5c7726648cf8f58390f18ad 100644 (file)
@@ -806,6 +806,7 @@ dname_test_has_label(void)
        /* 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);
 
index 239a56ac1f284ac3c1db40e1c60959f3e8fe45f7..c8f09ddbc8b54a87c3dbe9ec779e0efc8cafac2e 100644 (file)
@@ -561,7 +561,13 @@ dname_lab_startswith(uint8_t* label, char* prefix, char** endptr)
 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)