aboutsummaryrefslogtreecommitdiff
path: root/libidn/idna.c
diff options
context:
space:
mode:
Diffstat (limited to 'libidn/idna.c')
-rw-r--r--libidn/idna.c21
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;