X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Fsilcstringprep.c;h=b1716cc501f0c783042b34a4e2ceb6db16882324;hb=52e57c880aba9c5e89f59d962eb9af75670b76e0;hp=5674eaf3009226abb2fff24ebb87b6b4a0ae7197;hpb=40f8443d8d3a6577336ee66d18e04d9ac4d956bb;p=silc.git diff --git a/lib/silcutil/silcstringprep.c b/lib/silcutil/silcstringprep.c index 5674eaf3..b1716cc5 100644 --- a/lib/silcutil/silcstringprep.c +++ b/lib/silcutil/silcstringprep.c @@ -19,7 +19,7 @@ #include "silc.h" #include "silcstringprep.h" -#include +#include "stringprep.h" /* We use GNU Libidn which has stringprep to do the magic. Only bad thing is that its interface is idiotic. We have our own API here in case @@ -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)); }