mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Two necessary fixes (but not enough to make tests pass):
- Use os.urandom() as the only source of random bytes. - Don't reference socket._fileobject; use io.BufferedReader instead.
This commit is contained in:
parent
1f9f8254c4
commit
89687b9ba8
1 changed files with 6 additions and 19 deletions
|
@ -90,6 +90,7 @@ f = urllib2.urlopen('http://www.python.org/')
|
|||
import base64
|
||||
import hashlib
|
||||
import httplib
|
||||
import io
|
||||
import mimetools
|
||||
import os
|
||||
import posixpath
|
||||
|
@ -832,17 +833,7 @@ class ProxyBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler):
|
|||
|
||||
def randombytes(n):
|
||||
"""Return n random bytes."""
|
||||
# Use /dev/urandom if it is available. Fall back to random module
|
||||
# if not. It might be worthwhile to extend this function to use
|
||||
# other platform-specific mechanisms for getting random bytes.
|
||||
if os.path.exists("/dev/urandom"):
|
||||
f = open("/dev/urandom")
|
||||
s = f.read(n)
|
||||
f.close()
|
||||
return s
|
||||
else:
|
||||
L = [chr(random.randrange(0, 256)) for i in range(n)]
|
||||
return "".join(L)
|
||||
return str(os.urandom(n), "latin-1")
|
||||
|
||||
class AbstractDigestAuthHandler:
|
||||
# Digest authentication is specified in RFC 2617.
|
||||
|
@ -1077,14 +1068,10 @@ class AbstractHTTPHandler(BaseHandler):
|
|||
# Pick apart the HTTPResponse object to get the addinfourl
|
||||
# object initialized properly.
|
||||
|
||||
# Wrap the HTTPResponse object in socket's file object adapter
|
||||
# for Windows. That adapter calls recv(), so delegate recv()
|
||||
# to read(). This weird wrapping allows the returned object to
|
||||
# have readline() and readlines() methods.
|
||||
|
||||
r.recv = r.read
|
||||
# XXX socket._fileobject is gone; use some class from io.py instead
|
||||
fp = socket._fileobject(r, close=True)
|
||||
# Add some fake methods to the reader to satisfy BufferedReader.
|
||||
r.readable = lambda: True
|
||||
r.writable = r.seekable = lambda: False
|
||||
fp = io.BufferedReader(r)
|
||||
|
||||
resp = addinfourl(fp, r.msg, req.get_full_url())
|
||||
resp.code = r.status
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue