summaryrefslogtreecommitdiff
path: root/util/data/dname.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/data/dname.c')
-rw-r--r--util/data/dname.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/util/data/dname.c b/util/data/dname.c
index 76b2ec7d6d8a..f08760e2f9fc 100644
--- a/util/data/dname.c
+++ b/util/data/dname.c
@@ -644,24 +644,24 @@ void dname_str(uint8_t* dname, char* str)
if(!dname || !*dname) {
*s++ = '.';
*s = 0;
- return;
+ goto out;
}
lablen = *dname++;
while(lablen) {
if(lablen > LDNS_MAX_LABELLEN) {
*s++ = '#';
*s = 0;
- return;
+ goto out;
}
len += lablen+1;
- if(len >= LDNS_MAX_DOMAINLEN-1) {
+ if(len >= LDNS_MAX_DOMAINLEN) {
*s++ = '&';
*s = 0;
- return;
+ goto out;
}
while(lablen--) {
- if(isalnum((unsigned char)*dname)
- || *dname == '-' || *dname == '_'
+ if(isalnum((unsigned char)*dname)
+ || *dname == '-' || *dname == '_'
|| *dname == '*')
*s++ = *(char*)dname++;
else {
@@ -673,6 +673,10 @@ void dname_str(uint8_t* dname, char* str)
lablen = *dname++;
}
*s = 0;
+
+out:
+ log_assert(s - str < LDNS_MAX_DOMAINLEN);
+ return;
}
int