Mercurial > pidgin.yaz
diff libpurple/ntlm.c @ 22447:9b154f484d64
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Tue, 11 Mar 2008 21:41:53 +0000 |
parents | 0e4549c09e64 |
children | 75654d6b2b4d |
line wrap: on
line diff
--- a/libpurple/ntlm.c Tue Mar 11 16:20:54 2008 +0000 +++ b/libpurple/ntlm.c Tue Mar 11 21:41:53 2008 +0000 @@ -31,6 +31,7 @@ #include "util.h" #include "ntlm.h" #include "cipher.h" +#include "debug.h" #include <string.h> #define NTLM_NEGOTIATE_NTLM2_KEY 0x00080000 @@ -291,20 +292,32 @@ tmp = (char *)tmsg + sizeof(struct type3_message); - ucs2le = g_convert(domain, -1, "UCS-2LE", "UTF-8", NULL, NULL, NULL); - memcpy(tmp, ucs2le, domainlen); - g_free(ucs2le); - tmp += domainlen; + ucs2le = g_convert(domain, -1, "UTF-16LE", "UTF-8", NULL, NULL, NULL); + if (ucs2le != NULL) { + memcpy(tmp, ucs2le, domainlen); + g_free(ucs2le); + tmp += domainlen; + } else { + purple_debug_info("ntlm", "Unable to encode domain in UTF-16LE.\n"); + } - ucs2le = g_convert(username, -1, "UCS-2LE", "UTF-8", NULL, NULL, NULL); - memcpy(tmp, ucs2le, usernamelen); - g_free(ucs2le); - tmp += usernamelen; + ucs2le = g_convert(username, -1, "UTF-16LE", "UTF-8", NULL, NULL, NULL); + if (ucs2le != NULL) { + memcpy(tmp, ucs2le, usernamelen); + g_free(ucs2le); + tmp += usernamelen; + } else { + purple_debug_info("ntlm", "Unable to encode username in UTF-16LE.\n"); + } - ucs2le = g_convert(hostname, -1, "UCS-2LE", "UTF-8", NULL, NULL, NULL); - memcpy(tmp, ucs2le, hostnamelen); - g_free(ucs2le); - tmp += hostnamelen; + ucs2le = g_convert(hostname, -1, "UTF-16LE", "UTF-8", NULL, NULL, NULL); + if (ucs2le != NULL) { + memcpy(tmp, ucs2le, hostnamelen); + g_free(ucs2le); + tmp += hostnamelen; + } else { + purple_debug_info("ntlm", "Unable to encode hostname in UTF-16LE.\n"); + } /* LM */ if (passwlen > 14) @@ -327,7 +340,7 @@ tmp += 0x18; /* NTLM */ - /* Convert the password to UCS-2LE */ + /* Convert the password to UTF-16LE */ lennt = strlen(passw); for (idx = 0; idx < lennt; idx++) {