From 399686e40483ef012cb2433c3fe0a77d70aa666f Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Thu, 24 May 2007 12:31:53 +0000 Subject: [PATCH] Fixed buffer realloc. --- lib/silcutil/silcstringprep.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/silcutil/silcstringprep.c b/lib/silcutil/silcstringprep.c index 18ec3e94..b1716cc5 100644 --- a/lib/silcutil/silcstringprep.c +++ b/lib/silcutil/silcstringprep.c @@ -186,7 +186,7 @@ silc_stringprep(const unsigned char *bin, SilcUInt32 bin_len, f |= STRINGPREP_NO_UNASSIGNED; /* Prepare */ - ret = stringprep((char *)utf8s, utf8s_len + 1, f, profile); + ret = stringprep((char *)utf8s, utf8s_len, f, profile); SILC_LOG_DEBUG(("stringprep() return %d", ret)); /* Since the stringprep() doesn't allocate returned buffer, and @@ -194,10 +194,10 @@ silc_stringprep(const unsigned char *bin, SilcUInt32 bin_len, much space we must have for the conversion. Allocate more if it fails, and try again. */ if (ret == STRINGPREP_TOO_SMALL_BUFFER) { - utf8s = silc_realloc(utf8s, sizeof(*utf8s) * (utf8s_len * 2)); + utf8s = silc_realloc(utf8s, sizeof(*utf8s) * ((utf8s_len * 2) + 1)); if (!utf8s) return SILC_STRINGPREP_ERR_OUT_OF_MEMORY; - memset(utf8s + utf8s_len, 0, utf8s_len); + memset(utf8s + utf8s_len + 1, 0, utf8s_len); ret = stringprep((char *)utf8s, utf8s_len * 2, f, profile); SILC_LOG_DEBUG(("stringprep() return %d", ret)); } -- 2.24.0