patchbomb: fix handling of email addresses with Unicode domains (IDNA)
authorMarti Raudsepp <marti@juffo.org>
Thu, 05 Nov 2009 10:49:28 +0100
changeset 9715 f0e99a2eac76
parent 9714 2f1ab7f77ddc
child 9716 ea8c207a0f78
patchbomb: fix handling of email addresses with Unicode domains (IDNA) dom.encode('idna') requires dom to be a Unicode string.
mercurial/mail.py
tests/test-patchbomb
tests/test-patchbomb.out
--- a/mercurial/mail.py	Thu Nov 05 11:05:13 2009 +0100
+++ b/mercurial/mail.py	Thu Nov 05 10:49:28 2009 +0100
@@ -169,7 +169,7 @@
     try:
         acc, dom = addr.split('@')
         acc = acc.encode('ascii')
-        dom = dom.encode('idna')
+        dom = dom.decode(encoding.encoding).encode('idna')
         addr = '%s@%s' % (acc, dom)
     except UnicodeDecodeError:
         raise util.Abort(_('invalid email address: %s') % addr)
--- a/tests/test-patchbomb	Thu Nov 05 11:05:13 2009 +0100
+++ b/tests/test-patchbomb	Thu Nov 05 10:49:28 2009 +0100
@@ -170,3 +170,10 @@
 echo "% test multiple flags for multiple patches"
 hg email --date '1970-1-1 0:1' -n --flag fooFlag --flag barFlag -f quux -t foo \
  -c bar -s test -r 0:1 | fixheaders
+
+echo "% test multi-byte domain parsing"
+UUML=`echo -en '\xfc'`
+export HGENCODING=iso-8859-1
+hg email --date '1980-1-1 0:1' -m tmp.mbox -f quux -t "bar@${UUML}nicode.com" \
+  -s test -r 0
+cat tmp.mbox | fixheaders
--- a/tests/test-patchbomb.out	Thu Nov 05 11:05:13 2009 +0100
+++ b/tests/test-patchbomb.out	Thu Nov 05 10:49:28 2009 +0100
@@ -1469,3 +1469,34 @@
 @@ -0,0 +1,1 @@
 +b
 
+% test multi-byte domain parsing
+This patch series consists of 1 patches.
+
+
+Writing [PATCH] test ...
+From quux Tue Jan  1 00:01:01 1980
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [PATCH] test
+X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+Message-Id: <8580ff50825a50c8f716.315532860@
+User-Agent: Mercurial-patchbomb
+Date: Tue, 01 Jan 1980 00:01:00 +0000
+From: quux
+To: bar@xn--nicode-2ya.com
+
+# HG changeset patch
+# User test
+# Date 1 0
+# Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
+# Parent  0000000000000000000000000000000000000000
+a
+
+diff -r 000000000000 -r 8580ff50825a a
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/a	Thu Jan 01 00:00:01 1970 +0000
+@@ -0,0 +1,1 @@
++a
+
+