From 32543dd5a507a10eb2dae9b1b7092c77965f6486 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20R=C3=BChsen?= Date: Sun, 25 Sep 2016 12:49:56 +0200 Subject: [PATCH] Avoid unneeded memory allocactions in psl_str_to_utf8lower() Reported-by: https://github.com/daurnimator --- src/psl.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/psl.c b/src/psl.c index 68bb014..13a4d6b 100644 --- a/src/psl.c +++ b/src/psl.c @@ -1693,7 +1693,7 @@ out: if (cd != (iconv_t)-1) { char *tmp = (char *)str; /* iconv won't change where str points to, but changes tmp itself */ - size_t tmp_len = strlen(str); + size_t tmp_len = strlen(str) + 1; size_t dst_len = tmp_len * 6, dst_len_tmp = dst_len; char *dst = malloc(dst_len + 1), *dst_tmp = dst; @@ -1710,10 +1710,11 @@ out: /* u8_tolower() does not terminate the result string */ ret = PSL_SUCCESS; if (lower) { - if ((*lower = malloc(len + 1))) { - /* tmp is not 0 terminated */ + if (tmp != (char *)resbuf) { + *lower = tmp; + tmp = NULL; + } else if ((*lower = malloc(len))) { memcpy(*lower, tmp, len); - (*lower)[len] = 0; } else ret = PSL_ERR_NO_MEM; } @@ -1742,13 +1743,14 @@ out: ret = PSL_SUCCESS; /* we need a conversion to lowercase */ - if ((tmp = u8_tolower((uint8_t *)str, u8_strlen((uint8_t *)str), 0, UNINORM_NFKC, resbuf, &len))) { + if ((tmp = u8_tolower((uint8_t *)str, u8_strlen((uint8_t *)str) + 1, 0, UNINORM_NFKC, resbuf, &len))) { /* u8_tolower() does not terminate the result string */ if (lower) { - if ((*lower = malloc(len + 1))) { - /* tmp is not 0 terminated */ + if (tmp != resbuf) { + *lower = tmp; + tmp = NULL; + } else if ((*lower = malloc(len))) { memcpy(*lower, tmp, len); - (*lower)[len] = 0; } else ret = PSL_ERR_NO_MEM; }