aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--embed/mozilla/EphySingle.cpp29
-rw-r--r--embed/mozilla/mozilla-embed-single.cpp33
3 files changed, 65 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 7665ae8de..4f9a6bd22 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2004-07-05 Christian Persch <chpe@cvs.gnome.org>
+ * embed/mozilla/EphySingle.cpp:
+ * embed/mozilla/mozilla-embed-single.cpp:
+
+ Decode ACE for UI, and encode UTF-8 hostnames before using
+ cookie and passwords functions with them.
+ Fixes bug #130930.
+
+2004-07-05 Christian Persch <chpe@cvs.gnome.org>
+
* embed/mozilla/EventContext.cpp:
* embed/mozilla/EventContext.h:
diff --git a/embed/mozilla/EphySingle.cpp b/embed/mozilla/EphySingle.cpp
index b8814d4e6..3c8fb67b6 100644
--- a/embed/mozilla/EphySingle.cpp
+++ b/embed/mozilla/EphySingle.cpp
@@ -33,6 +33,11 @@
#include <nsICookieManager.h>
#include <nsIServiceManager.h>
#include <nsICookie2.h>
+#include <nsIServiceManager.h>
+
+#ifdef ALLOW_PRIVATE_API
+#include <nsIIDNService.h>
+#endif
NS_IMPL_ISUPPORTS2(EphySingle, nsIObserver, nsISupportsWeakReference)
@@ -231,12 +236,23 @@ NS_IMETHODIMP EphySingle::Observe(nsISupports *aSubject,
EphyCookie *
mozilla_cookie_to_ephy_cookie (nsICookie *cookie)
{
- EphyCookie *info = ephy_cookie_new ();
+ EphyCookie *info;
nsEmbedCString transfer;
cookie->GetHost (transfer);
- info->domain = g_strdup (transfer.get());
+
+ nsCOMPtr<nsIIDNService> idnService
+ (do_GetService ("@mozilla.org/network/idn-service;1"));
+ NS_ENSURE_TRUE (idnService, nsnull);
+
+ nsEmbedCString decoded;
+ /* ToUTF8 never fails, no need to check return value */
+ idnService->ConvertACEtoUTF8 (transfer, decoded);
+
+ info = ephy_cookie_new ();
+ info->domain = g_strdup (decoded.get());
+
cookie->GetName (transfer);
info->name = g_strdup (transfer.get());
cookie->GetValue (transfer);
@@ -305,5 +321,12 @@ mozilla_permission_to_ephy_permission (nsIPermission *perm)
nsEmbedCString host;
perm->GetHost(host);
- return ephy_permission_info_new (host.get(), type.get(), permission);
+ nsCOMPtr<nsIIDNService> idnService
+ (do_GetService ("@mozilla.org/network/idn-service;1"));
+ NS_ENSURE_TRUE (idnService, nsnull);
+
+ nsEmbedCString decodedHost;
+ idnService->ConvertACEtoUTF8 (host, decodedHost);
+
+ return ephy_permission_info_new (decodedHost.get(), type.get(), permission);
}
diff --git a/embed/mozilla/mozilla-embed-single.cpp b/embed/mozilla/mozilla-embed-single.cpp
index 9556d8227..0ee08f9d4 100644
--- a/embed/mozilla/mozilla-embed-single.cpp
+++ b/embed/mozilla/mozilla-embed-single.cpp
@@ -78,6 +78,7 @@
#include <nsICacheService.h>
#include <nsIFontEnumerator.h>
#include <nsNetCID.h>
+#include <nsIIDNService.h>
#endif
#define MOZILLA_PROFILE_DIR "/mozilla"
@@ -655,6 +656,7 @@ impl_list_cookies (EphyCookieManager *manager)
if (NS_FAILED (result) || !keks) continue;
EphyCookie *cookie = mozilla_cookie_to_ephy_cookie (keks);
+ if (!cookie) continue;
cookies = g_list_prepend (cookies, cookie);
}
@@ -670,7 +672,16 @@ impl_remove_cookie (EphyCookieManager *manager,
do_GetService (NS_COOKIEMANAGER_CONTRACTID);
if (!cookieManager) return;
- cookieManager->Remove (nsEmbedCString(cookie->domain),
+ nsCOMPtr<nsIIDNService> idnService
+ (do_GetService ("@mozilla.org/network/idn-service;1"));
+ NS_ENSURE_TRUE (idnService, );
+
+ nsresult rv;
+ nsEmbedCString host;
+ rv = idnService->ConvertUTF8toACE (nsEmbedCString(cookie->domain), host);
+ NS_ENSURE_SUCCESS (rv, );
+
+ cookieManager->Remove (host,
nsEmbedCString(cookie->name),
nsEmbedCString(cookie->path),
PR_FALSE /* block */);
@@ -698,6 +709,10 @@ impl_list_passwords (EphyPasswordManager *manager)
do_GetService (NS_PASSWORDMANAGER_CONTRACTID);
if (!passwordManager) return NULL;
+ nsCOMPtr<nsIIDNService> idnService
+ (do_GetService ("@mozilla.org/network/idn-service;1"));
+ NS_ENSURE_TRUE (idnService, NULL);
+
nsCOMPtr<nsISimpleEnumerator> passwordEnumerator;
passwordManager->GetEnumerator (getter_AddRefs(passwordEnumerator));
NS_ENSURE_TRUE (passwordEnumerator, NULL);
@@ -715,6 +730,9 @@ impl_list_passwords (EphyPasswordManager *manager)
rv = nsPassword->GetHost (transfer);
if (NS_FAILED (rv)) continue;
+ nsEmbedCString host;
+ idnService->ConvertACEtoUTF8 (transfer, host);
+
nsEmbedString unicodeName;
rv = nsPassword->GetUser (unicodeName);
if (NS_FAILED (rv)) continue;
@@ -725,7 +743,7 @@ impl_list_passwords (EphyPasswordManager *manager)
EphyPasswordInfo *p = g_new0 (EphyPasswordInfo, 1);
- p->host = g_strdup (transfer.get());
+ p->host = g_strdup (host.get());
p->username = g_strdup (userName.get());
p->password = NULL;
@@ -744,10 +762,19 @@ impl_remove_password (EphyPasswordManager *manager,
do_GetService (NS_PASSWORDMANAGER_CONTRACTID);
if (!pm) return;
+ nsCOMPtr<nsIIDNService> idnService
+ (do_GetService ("@mozilla.org/network/idn-service;1"));
+ NS_ENSURE_TRUE (idnService, );
+
+ nsresult rv;
+ nsEmbedCString host;
+ rv = idnService->ConvertUTF8toACE (nsEmbedCString(info->host), host);
+ NS_ENSURE_SUCCESS (rv, );
+
nsEmbedString userName;
NS_CStringToUTF16 (nsEmbedCString(info->username),
NS_CSTRING_ENCODING_UTF8, userName);
- pm->RemoveUser (nsEmbedCString(info->host), userName);
+ pm->RemoveUser (host, userName);
}
static void