Skip to content

Fix pyopenssl adapter under Python 3 #113

@webknjaz

Description

@webknjaz

It works under Python 2, but not under Python 3.
It's a follow-up for #6

I'm submitting a ...

  • bug report
  • feature request
  • question about the decisions made in the repository

Describe the bug. What is the current behavior?

It raises exception OpenSSL.SSL.WantReadError.

What is the motivation / use case for changing the behavior?
I want consistency in SSL.

To Reproduce

Steps to reproduce the behavior: tox -- --no-cov -s cheroot/test/test_ssl.py

Expected behavior

That it'd work.

Details

 cheroot/test/test_ssl.py::test_ssl_adapters[builtin] ✓                                                          50% █████     
WantReadError()                                                                                                               
Traceback (most recent call last):        
  File "/home/wk/src/github/cherrypy/cheroot/cheroot/server.py", line 1219, in communicate                                    
    req.parse_request()            
  File "/home/wk/src/github/cherrypy/cheroot/cheroot/server.py", line 689, in parse_request                                   
    success = self.read_request_line()        
  File "/home/wk/src/github/cherrypy/cheroot/cheroot/server.py", line 728, in read_request_line                               
    request_line = self.rfile.readline()
  File "/home/wk/src/github/cherrypy/cheroot/cheroot/server.py", line 277, in readline                                        
    data = self.rfile.readline(256)         
  File "/home/wk/.pyenv/versions/3.7.0/lib/python3.7/_pyio.py", line 513, in readline                                          
    b = self.read(nreadahead())     
  File "/home/wk/.pyenv/versions/3.7.0/lib/python3.7/_pyio.py", line 492, in nreadahead
    readahead = self.peek(1)      
  File "/home/wk/.pyenv/versions/3.7.0/lib/python3.7/_pyio.py", line 1076, in peek                                           
    return self._peek_unlocked(size)                                                                                          
  File "/home/wk/.pyenv/versions/3.7.0/lib/python3.7/_pyio.py", line 1083, in _peek_unlocked                                   
    current = self.raw.read(to_read)                                                                                           
  File "/home/wk/.pyenv/versions/3.7.0/lib/python3.7/socket.py", line 589, in readinto
    return self._sock.recv_into(b)                                                                                             
  File "/home/wk/src/github/cherrypy/cheroot/.tox/python/lib/python3.7/site-packages/OpenSSL/SSL.py", line 1814, in recv_into
    self._raise_ssl_error(self._ssl, result)                       
  File "/home/wk/src/github/cherrypy/cheroot/.tox/python/lib/python3.7/site-packages/OpenSSL/SSL.py", line 1614, in _raise_ssl_error
    raise WantReadError()                                                                        
OpenSSL.SSL.WantReadError
Exception in thread CP Server Thread-13:                                                                                      Traceback (most recent call last):
  File "/home/wk/src/github/cherrypy/cheroot/cheroot/server.py", line 1219, in communicate
    req.parse_request()
  File "/home/wk/src/github/cherrypy/cheroot/cheroot/server.py", line 689, in parse_request
    success = self.read_request_line()
  File "/home/wk/src/github/cherrypy/cheroot/cheroot/server.py", line 728, in read_request_line
    request_line = self.rfile.readline()
  File "/home/wk/src/github/cherrypy/cheroot/cheroot/server.py", line 277, in readline
    data = self.rfile.readline(256)
  File "/home/wk/.pyenv/versions/3.7.0/lib/python3.7/_pyio.py", line 513, in readline
    b = self.read(nreadahead())
  File "/home/wk/.pyenv/versions/3.7.0/lib/python3.7/_pyio.py", line 492, in nreadahead
    readahead = self.peek(1)
  File "/home/wk/.pyenv/versions/3.7.0/lib/python3.7/_pyio.py", line 1076, in peek
    return self._peek_unlocked(size)
  File "/home/wk/.pyenv/versions/3.7.0/lib/python3.7/_pyio.py", line 1083, in _peek_unlocked
    current = self.raw.read(to_read)
  File "/home/wk/.pyenv/versions/3.7.0/lib/python3.7/socket.py", line 589, in readinto
    return self._sock.recv_into(b)
  File "/home/wk/src/github/cherrypy/cheroot/.tox/python/lib/python3.7/site-packages/OpenSSL/SSL.py", line 1814, in recv_into
    self._raise_ssl_error(self._ssl, result)
  File "/home/wk/src/github/cherrypy/cheroot/.tox/python/lib/python3.7/site-packages/OpenSSL/SSL.py", line 1614, in _raise_ssl_error
    raise WantReadError()
OpenSSL.SSL.WantReadError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/wk/.pyenv/versions/3.7.0/lib/python3.7/threading.py", line 917, in _bootstrap_inner
    self.run()
  File "/home/wk/src/github/cherrypy/cheroot/cheroot/workers/threadpool.py", line 112, in run                                     conn.communicate()
  File "/home/wk/src/github/cherrypy/cheroot/cheroot/server.py", line 1256, in communicate
    self._conditional_error(req, '500 Internal Server Error')
  File "/home/wk/src/github/cherrypy/cheroot/cheroot/server.py", line 1282, in _conditional_error                                 req.simple_response(response)                             
  File "/home/wk/src/github/cherrypy/cheroot/cheroot/server.py", line 1071, in simple_response
    self.conn.wfile.write(EMPTY.join(buf))
  File "/home/wk/src/github/cherrypy/cheroot/cheroot/makefile.py", line 31, in write
    self._flush_unlocked()
  File "/home/wk/src/github/cherrypy/cheroot/cheroot/makefile.py", line 40, in _flush_unlocked
    n = self.raw.write(bytes(self._write_buf))
  File "/home/wk/.pyenv/versions/3.7.0/lib/python3.7/socket.py", line 607, in write
    return self._sock.send(b)
  File "/home/wk/src/github/cherrypy/cheroot/.tox/python/lib/python3.7/site-packages/OpenSSL/SSL.py", line 1729, in send
    self._raise_ssl_error(self._ssl, result)
  File "/home/wk/src/github/cherrypy/cheroot/.tox/python/lib/python3.7/site-packages/OpenSSL/SSL.py", line 1614, in _raise_ssl_error
    raise WantReadError()
OpenSSL.SSL.WantReadError

Environment

  • Cheroot version: master (6.5.2)
  • CherryPy version: N/A
  • Python version: 3.X
  • OS: XXX
  • Browser: N/A

Additional context

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is brokenhelp wantedSomebody help us, please!

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions