aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ldap.c32
1 files changed, 27 insertions, 5 deletions
diff --git a/lib/ldap.c b/lib/ldap.c
index 0370d4bc6..4390a4dff 100644
--- a/lib/ldap.c
+++ b/lib/ldap.c
@@ -430,23 +430,39 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
/* Get the DN and write it to the client */
{
+ char *name;
+ size_t name_len;
#if defined(CURL_LDAP_WIN)
TCHAR *dn = ldap_get_dn(server, entryIterator);
- size_t dn_len = _tcslen(dn);
+ name = Curl_convert_tchar_to_UTF8(dn);
+ if(!name) {
+ ldap_memfree(dn);
+
+ result = CURLE_OUT_OF_MEMORY;
+
+ goto quit;
+ }
#else
- char *dn = ldap_get_dn(server, entryIterator);
- size_t dn_len = strlen(dn);
+ char *dn = name = ldap_get_dn(server, entryIterator);
#endif
+ name_len = strlen(name);
result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"DN: ", 4);
if(result) {
+#if defined(CURL_LDAP_WIN)
+ Curl_unicodefree(name);
+#endif
ldap_memfree(dn);
goto quit;
}
- result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *) dn, dn_len);
+ result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *) name,
+ name_len);
if(result) {
+#if defined(CURL_LDAP_WIN)
+ Curl_unicodefree(name);
+#endif
ldap_memfree(dn);
goto quit;
@@ -454,13 +470,19 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1);
if(result) {
+#if defined(CURL_LDAP_WIN)
+ Curl_unicodefree(name);
+#endif
ldap_memfree(dn);
goto quit;
}
- dlsize += dn_len + 5;
+ dlsize += name_len + 5;
+#if defined(CURL_LDAP_WIN)
+ Curl_unicodefree(name);
+#endif
ldap_memfree(dn);
}