Kaydet (Commit) 2a5a26c8 authored tarafından Dong-hee Na's avatar Dong-hee Na Kaydeden (comit) larryhastings

[3.4] bpo-30119: fix ftplib.FTP.putline() to throw an error for a illegal command (#1214) (#2893)

üst 5c673dd2
...@@ -187,6 +187,8 @@ class FTP: ...@@ -187,6 +187,8 @@ class FTP:
# Internal: send one line to the server, appending CRLF # Internal: send one line to the server, appending CRLF
def putline(self, line): def putline(self, line):
if '\r' in line or '\n' in line:
raise ValueError('an illegal newline character should not be contained')
line = line + CRLF line = line + CRLF
if self.debugging > 1: if self.debugging > 1:
print('*put*', self.sanitize(line)) print('*put*', self.sanitize(line))
......
...@@ -482,6 +482,9 @@ class TestFTPClass(TestCase): ...@@ -482,6 +482,9 @@ class TestFTPClass(TestCase):
self.assertEqual(self.client.sanitize('PASS 12345'), repr('PASS *****')) self.assertEqual(self.client.sanitize('PASS 12345'), repr('PASS *****'))
def test_exceptions(self): def test_exceptions(self):
self.assertRaises(ValueError, self.client.sendcmd, 'echo 40\r\n0')
self.assertRaises(ValueError, self.client.sendcmd, 'echo 40\n0')
self.assertRaises(ValueError, self.client.sendcmd, 'echo 40\r0')
self.assertRaises(ftplib.error_temp, self.client.sendcmd, 'echo 400') self.assertRaises(ftplib.error_temp, self.client.sendcmd, 'echo 400')
self.assertRaises(ftplib.error_temp, self.client.sendcmd, 'echo 499') self.assertRaises(ftplib.error_temp, self.client.sendcmd, 'echo 499')
self.assertRaises(ftplib.error_perm, self.client.sendcmd, 'echo 500') self.assertRaises(ftplib.error_perm, self.client.sendcmd, 'echo 500')
...@@ -490,7 +493,8 @@ class TestFTPClass(TestCase): ...@@ -490,7 +493,8 @@ class TestFTPClass(TestCase):
def test_all_errors(self): def test_all_errors(self):
exceptions = (ftplib.error_reply, ftplib.error_temp, ftplib.error_perm, exceptions = (ftplib.error_reply, ftplib.error_temp, ftplib.error_perm,
ftplib.error_proto, ftplib.Error, OSError, EOFError) ftplib.error_proto, ftplib.Error, OSError,
EOFError)
for x in exceptions: for x in exceptions:
try: try:
raise x('exception not included in all_errors set') raise x('exception not included in all_errors set')
......
ftplib.FTP.putline() now throws ValueError on commands that contains CR or
LF. Patch by Dong-hee Na.
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