From: Roy Marples Date: Mon, 3 Jul 2023 11:52:19 +0000 (+0100) Subject: common: Improve valid_domain and check correct return X-Git-Tag: v10.0.2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3d956701c4c17d4f7cf805bb852fe441acd1e3b4;p=thirdparty%2Fdhcpcd.git common: Improve valid_domain and check correct return Improvement for #218. --- diff --git a/src/dhcp-common.c b/src/dhcp-common.c index ef33d246..679af243 100644 --- a/src/dhcp-common.c +++ b/src/dhcp-common.c @@ -413,26 +413,23 @@ decode_rfc1035(char *out, size_t len, const uint8_t *p, size_t pl) } /* Check for a valid name as per RFC952 and RFC1123 section 2.1 */ -static int +static ssize_t valid_domainname(char *lbl, int type) { - char *slbl, *lst; + char *slbl = lbl, *lst = NULL; unsigned char c; - int start, len, errset; + int len = 0; + bool start = true, errset = false; if (lbl == NULL || *lbl == '\0') { errno = EINVAL; return 0; } - slbl = lbl; - lst = NULL; - start = 1; - len = errset = 0; for (;;) { c = (unsigned char)*lbl++; if (c == '\0') - return 1; + return lbl - slbl - 1; if (c == ' ') { if (lbl - 1 == slbl) /* No space at start */ break; @@ -440,7 +437,7 @@ valid_domainname(char *lbl, int type) break; /* Skip to the next label */ if (!start) { - start = 1; + start = true; lst = lbl - 1; } if (len) @@ -459,13 +456,13 @@ valid_domainname(char *lbl, int type) { if (++len > NS_MAXLABEL) { errno = ERANGE; - errset = 1; + errset = true; break; } } else break; if (start) - start = 0; + start = false; } if (!errset) @@ -473,7 +470,7 @@ valid_domainname(char *lbl, int type) if (lst) { /* At least one valid domain, return it */ *lst = '\0'; - return 1; + return lst - slbl; } return 0; } @@ -665,7 +662,7 @@ print_option(FILE *fp, const char *prefix, const struct dhcp_opt *opt, goto err; if (sl == 0) goto done; - if (valid_domainname(domain, opt->type) == -1) + if (!valid_domainname(domain, opt->type)) goto err; return efprintf(fp, "%s", domain); }