]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.4] bpo-30119: fix ftplib.FTP.putline() to throw an error for a illegal command...
authorDong-hee Na <donghee.na92@gmail.com>
Thu, 27 Jul 2017 19:47:46 +0000 (04:47 +0900)
committerlarryhastings <larry@hastings.org>
Thu, 27 Jul 2017 19:47:46 +0000 (12:47 -0700)
Lib/ftplib.py
Lib/test/test_ftplib.py
Misc/NEWS.d/next/Library/2017-07-26-21-50-13.bpo-30119.DZ6C_S.rst [new file with mode: 0644]

index 1d3bd9ef21da105bddd33c27abb011854b80b3dc..47f02f8b39bea88fd1264e30814600072ec64fd0 100644 (file)
@@ -187,6 +187,8 @@ class FTP:
 
     # Internal: send one line to the server, appending CRLF
     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
         if self.debugging > 1:
             print('*put*', self.sanitize(line))
index d3be7d6d0079f2d4c9e9c865fe3a447bb05667be..1d448d5c6e288cfe6958ed9d8766c79576b31f4d 100644 (file)
@@ -482,6 +482,9 @@ class TestFTPClass(TestCase):
         self.assertEqual(self.client.sanitize('PASS 12345'), repr('PASS *****'))
 
     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 499')
         self.assertRaises(ftplib.error_perm, self.client.sendcmd, 'echo 500')
@@ -490,7 +493,8 @@ class TestFTPClass(TestCase):
 
     def test_all_errors(self):
         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:
             try:
                 raise x('exception not included in all_errors set')
diff --git a/Misc/NEWS.d/next/Library/2017-07-26-21-50-13.bpo-30119.DZ6C_S.rst b/Misc/NEWS.d/next/Library/2017-07-26-21-50-13.bpo-30119.DZ6C_S.rst
new file mode 100644 (file)
index 0000000..a37d370
--- /dev/null
@@ -0,0 +1,2 @@
+ftplib.FTP.putline() now throws ValueError on commands that contains CR or
+LF. Patch by Dong-hee Na.