Commit 5defef12 authored by Martin v. Löwis's avatar Martin v. Löwis

Support trailing dots in DNS names. Fixes #782510. Will backport to 2.3.

parent a42f8903
......@@ -150,10 +150,16 @@ class Codec(codecs.Codec):
raise UnicodeError, "unsupported error handling "+errors
result = []
for label in dots.split(input):
labels = dots.split(input)
if labels and len(labels[-1])==0:
trailing_dot = '.'
del labels[-1]
else:
trailing_dot = ''
for label in labels:
result.append(ToASCII(label))
# Join with U+002E
return ".".join(result), len(input)
return ".".join(result)+trailing_dot, len(input)
def decode(self,input,errors='strict'):
......@@ -168,11 +174,17 @@ class Codec(codecs.Codec):
unicode(input, "ascii")
labels = input.split(".")
if labels and len(labels[-1]) == 0:
trailing_dot = u'.'
del labels[-1]
else:
trailing_dot = u''
result = []
for label in labels:
result.append(ToUnicode(label))
return u".".join(result), len(input)
return u".".join(result)+trailing_dot, len(input)
class StreamWriter(Codec,codecs.StreamWriter):
pass
......
......@@ -524,6 +524,10 @@ class UnicodeTest(
# * strict decoding testing for all of the
# UTF8_ERROR cases in PyUnicode_DecodeUTF8
def test_codecs_idna(self):
# Test whether trailing dot is preserved
self.assertEqual(u"www.python.org.".encode("idna"), "www.python.org.")
def test_codecs_errors(self):
# Error handling (encoding)
self.assertRaises(UnicodeError, u'Andr\202 x'.encode, 'ascii')
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment