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
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));
}