diff options
Diffstat (limited to 'libidn')
-rw-r--r-- | libidn/idna.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/libidn/idna.c b/libidn/idna.c index b89350f1f3..69c928fc42 100644 --- a/libidn/idna.c +++ b/libidn/idna.c @@ -437,21 +437,24 @@ idna_to_ascii_4z (const uint32_t * input, char **output, int flags) U+3002 (ideographic full stop), U+FF0E (fullwidth full stop), U+FF61 (halfwidth ideographic full stop). */ - if (input[0] == 0 - /* Handle explicit zero-length root label. */ - || (DOTP (input[0]) && input[1] == 0)) + if (input[0] == 0) { -#if defined HAVE_STRDUP || defined _LIBC - *output = strdup (input); - return *output == NULL ? IDNA_MALLOC_ERROR : IDNA_SUCCESS; -#else /* Handle implicit zero-length root label. */ *output = malloc (1); if (!*output) return IDNA_MALLOC_ERROR; - strcpy (*output, input); + strcpy (*output, ""); + return IDNA_SUCCESS; + } + + if (DOTP (input[0]) && input[1] == 0) + { + /* Handle explicit zero-length root label. */ + *output = malloc (2); + if (!*output) + return IDNA_MALLOC_ERROR; + strcpy (*output, "."); return IDNA_SUCCESS; -#endif } *output = NULL; |