commit 35cf19e3f36688927ff28aa2b45108cda5f9a8d8 from: Omar Polo date: Thu Jan 28 16:25:59 2021 UTC punycode: refactoring use the correct term "label" instead of "component" when speaking about the parts of a hostname. Also, fix the sizes for max hostname and label. commit - 473e4531d5c55ef25dde8df5b57ef503ef1aa218 commit + 35cf19e3f36688927ff28aa2b45108cda5f9a8d8 blob - 8e16f487c065310dd2d62d64e1a49777ea876b18 blob + 7f9216e14774690e29c10e082732daf65c9dd451 --- gmid.h +++ gmid.h @@ -51,8 +51,9 @@ #define HOSTSLEN 64 #define LOCLEN 32 -/* RFC1034 imposes this limit. 63+1 for the NUL-terminator */ -#define DOMAIN_NAME_LEN (63+1) +/* maximum hostname and label length, +1 for the NUL-terminator */ +#define DOMAIN_NAME_LEN (253+1) +#define LABEL_LEN (63+1) #define LOGE(c, fmt, ...) logs(LOG_ERR, c, fmt, __VA_ARGS__) #define LOGW(c, fmt, ...) logs(LOG_WARNING, c, fmt, __VA_ARGS__) blob - 304db7a56560d97db8d2cfe8d760332fd7f46b6e blob + c00314c4ed91dbe753d78fd4e479fd0c3a7ab3c5 --- puny.c +++ puny.c @@ -49,7 +49,7 @@ adapt(int delta, int numpoints, int firsttime) } static const char * -copy_until_delimiter(const char *s, char *out, size_t len) +copy_label(const char *s, char *out, size_t len) { char *end, *t; size_t l; @@ -117,16 +117,16 @@ insert(char *out, size_t len, int codepoint, size_t i) switch (l) { case 2: t[1] = ( codepoint & 0x3F) + 0x80; - t[0] = ((codepoint >> 6) & 0x1F) + 0xC0; + t[0] = ((codepoint >> 6) & 0x1F) + 0xC0; break; case 3: t[2] = ( codepoint & 0x3F) + 0x80; - t[1] = ((codepoint >> 6) & 0x3F) + 0x80; + t[1] = ((codepoint >> 6) & 0x3F) + 0x80; t[0] = ((codepoint >> 12) & 0x0F) + 0xE0; break; case 4: t[3] = ( codepoint & 0x3F) + 0x80; - t[2] = ((codepoint >> 6) & 0x3F) + 0x80; + t[2] = ((codepoint >> 6) & 0x3F) + 0x80; t[1] = ((codepoint >> 12) & 0x3F) + 0x80; t[0] = ((codepoint >> 18) & 0x07) + 0xF0; break; @@ -152,7 +152,7 @@ decode(const char *str, char *out, size_t len) str += 4; if (strchr(str, '-') != NULL) { - if ((s = copy_until_delimiter(str, out, len)) == NULL) + if ((s = copy_label(str, out, len)) == NULL) return 0; if (*s == '-') s++; @@ -205,7 +205,7 @@ decode(const char *str, char *out, size_t len) } static const char * -end_of_component(const char *hostname) +end_of_label(const char *hostname) { for (; *hostname != '\0' && *hostname != '.'; ++hostname) ; /* nop */ @@ -215,7 +215,7 @@ end_of_component(const char *hostname) int puny_decode(const char *hostname, char *out, size_t len) { - char comp[DOMAIN_NAME_LEN]; + char label[LABEL_LEN]; const char *s, *end; size_t l; @@ -227,13 +227,13 @@ puny_decode(const char *hostname, char *out, size_t le for (;;) { end = end_of_component(s); l = end - s; - if (l >= sizeof(comp)) + if (l >= sizeof(label)) return 0; - memcpy(comp, s, end - s); - comp[end - s] = '\0'; + memcpy(label, s, l); + label[l] = '\0'; - if (!decode(comp, out, len)) + if (!decode(label, out, len)) return 0; if (*end == '\0')