Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
020d7c37
Commit
020d7c37
authored
Jan 03, 2014
by
R David Murray
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
closes 16039: CVE-2013-1752: limit line length in imaplib readline calls.
parent
5851218e
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
26 additions
and
1 deletion
+26
-1
Lib/imaplib.py
Lib/imaplib.py
+13
-1
Lib/test/test_imaplib.py
Lib/test/test_imaplib.py
+10
-0
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/imaplib.py
View file @
020d7c37
...
...
@@ -35,6 +35,15 @@ IMAP4_PORT = 143
IMAP4_SSL_PORT
=
993
AllowedVersions
=
(
'IMAP4REV1'
,
'IMAP4'
)
# Most recent first
# Maximal line length when calling readline(). This is to prevent
# reading arbitrary length lines. RFC 3501 and 2060 (IMAP 4rev1)
# don't specify a line length. RFC 2683 however suggests limiting client
# command lines to 1000 octets and server command lines to 8000 octets.
# We have selected 10000 for some extra margin and since that is supposedly
# also what UW and Panda IMAP does.
_MAXLINE
=
10000
# Commands
Commands
=
{
...
...
@@ -237,7 +246,10 @@ class IMAP4:
def
readline
(
self
):
"""Read line from remote."""
return
self
.
file
.
readline
()
line
=
self
.
file
.
readline
(
_MAXLINE
+
1
)
if
len
(
line
)
>
_MAXLINE
:
raise
self
.
error
(
"got more than %d bytes"
%
_MAXLINE
)
return
line
def
send
(
self
,
data
):
...
...
Lib/test/test_imaplib.py
View file @
020d7c37
...
...
@@ -165,6 +165,16 @@ class BaseThreadedNetworkedTests(unittest.TestCase):
self
.
imap_class
,
*
server
.
server_address
)
def
test_linetoolong
(
self
):
class
TooLongHandler
(
SimpleIMAPHandler
):
def
handle
(
self
):
# Send a very long response line
self
.
wfile
.
write
(
'* OK '
+
imaplib
.
_MAXLINE
*
'x'
+
'
\
r
\
n
'
)
with
self
.
reaped_server
(
TooLongHandler
)
as
server
:
self
.
assertRaises
(
imaplib
.
IMAP4
.
error
,
self
.
imap_class
,
*
server
.
server_address
)
class
ThreadedNetworkedTests
(
BaseThreadedNetworkedTests
):
server_class
=
SocketServer
.
TCPServer
...
...
Misc/NEWS
View file @
020d7c37
...
...
@@ -30,6 +30,9 @@ Core and Builtins
Library
-------
-
Issue
#
16039
:
CVE
-
2013
-
1752
:
Change
use
of
readline
in
imaplib
module
to
limit
line
length
.
Patch
by
Emil
Lind
.
-
Issue
#
19422
:
Explicitly
disallow
non
-
SOCK_STREAM
sockets
in
the
ssl
module
,
rather
than
silently
let
them
emit
clear
text
data
.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment