On Sun, Jan 26, 2020 at 7:53 PM William Dauchy <w.dau...@criteo.com> wrote:
> hostname were limited to 62 char, which is not RFC1035 compliant; > - the parsing loop should stop when above max label char > - fix len label test where d[i] was wrongly used > - simplify the whole function to avoid using two extra char* variable > > this should fix github issue #387 > > Signed-off-by: William Dauchy <w.dau...@criteo.com> > --- > src/dns.c | 31 +++++++++++++------------------ > 1 file changed, 13 insertions(+), 18 deletions(-) > > diff --git a/src/dns.c b/src/dns.c > index eefd8d0dc..28d47d26c 100644 > --- a/src/dns.c > +++ b/src/dns.c > @@ -1470,7 +1470,6 @@ int dns_str_to_dn_label(const char *str, int > str_len, char *dn, int dn_len) > */ > int dns_hostname_validation(const char *string, char **err) > { > - const char *c, *d; > int i; > > if (strlen(string) > DNS_MAX_NAME_SIZE) { > @@ -1479,36 +1478,32 @@ int dns_hostname_validation(const char *string, > char **err) > return 0; > } > > - c = string; > - while (*c) { > - d = c; > - > + while (*string) { > i = 0; > - while (*d != '.' && *d && i <= DNS_MAX_LABEL_SIZE) { > - i++; > - if (!((*d == '-') || (*d == '_') || > - ((*d >= 'a') && (*d <= 'z')) || > - ((*d >= 'A') && (*d <= 'Z')) || > - ((*d >= '0') && (*d <= '9')))) { > + while (*string && *string != '.' && i < > DNS_MAX_LABEL_SIZE) { > + if (!(*string == '-' || *string == '_' || > + (*string >= 'a' && *string <= 'z') || > + (*string >= 'A' && *string <= 'Z') || > + (*string >= '0' && *string <= '9'))) { > if (err) > *err = DNS_INVALID_CHARACTER; > return 0; > } > - d++; > + i++; > + string++; > } > > - if ((i >= DNS_MAX_LABEL_SIZE) && (d[i] != '.')) { > + if (!(*string)) > + break; > + > + if (*string != '.' && i >= DNS_MAX_LABEL_SIZE) { > if (err) > *err = DNS_LABEL_TOO_LONG; > return 0; > } > > - if (*d == '\0') > - goto out; > - > - c = ++d; > + string++; > } > - out: > return 1; > } > > -- > 2.24.1 > > This patch is "approved". Willy, you can apply. Baptiste