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

This commit is contained in:
Martin v. Löwis 2003-08-05 06:19:47 +00:00
parent 8db4403a76
commit 0d8e16c7ad
2 changed files with 19 additions and 3 deletions

View File

@ -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

View File

@ -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')