
python-checkins at python
Nov 25, 2009, 12:20 PM
Post #1 of 1
(162 views)
Permalink
|
|
r76525 - in python/branches/py3k: Lib/test/test_ssl.py Misc/NEWS Modules/_ssl.c
|
|
Author: antoine.pitrou Date: Wed Nov 25 19:55:32 2009 New Revision: 76525 Log: Merged revisions 75529 via svnmerge from svn+ssh://pythondev [at] svn/python/trunk ........ r75529 | antoine.pitrou | 2009-10-19 19:59:07 +0200 (lun., 19 oct. 2009) | 5 lines Issue #7133: SSL objects now support the new buffer API. This fixes the test_ssl failure. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_ssl.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/_ssl.c Modified: python/branches/py3k/Lib/test/test_ssl.py ============================================================================== --- python/branches/py3k/Lib/test/test_ssl.py (original) +++ python/branches/py3k/Lib/test/test_ssl.py Wed Nov 25 19:55:32 2009 @@ -651,21 +651,23 @@ except Exception as x: raise support.TestFailed("Unexpected exception: " + str(x)) else: - if connectionchatty: - if support.verbose: - sys.stdout.write( - " client: sending %s...\n" % (repr(indata))) - s.write(indata.encode('ASCII', 'strict')) - outdata = s.read() - if connectionchatty: - if support.verbose: - sys.stdout.write(" client: read %s\n" % repr(outdata)) - outdata = str(outdata, 'ASCII', 'strict') - if outdata != indata.lower(): - raise support.TestFailed( - "bad data <<%s>> (%d) received; expected <<%s>> (%d)\n" - % (repr(outdata[:min(len(outdata),20)]), len(outdata), - repr(indata[:min(len(indata),20)].lower()), len(indata))) + bindata = indata.encode('ASCII', 'strict') + for arg in [bindata, bytearray(bindata), memoryview(bindata)]: + if connectionchatty: + if support.verbose: + sys.stdout.write( + " client: sending %s...\n" % (repr(indata))) + s.write(arg) + outdata = s.read() + if connectionchatty: + if support.verbose: + sys.stdout.write(" client: read %s\n" % repr(outdata)) + outdata = str(outdata, 'ASCII', 'strict') + if outdata != indata.lower(): + raise support.TestFailed( + "bad data <<%s>> (%d) received; expected <<%s>> (%d)\n" + % (repr(outdata[:min(len(outdata),20)]), len(outdata), + repr(indata[:min(len(indata),20)].lower()), len(indata))) s.write("over\n".encode("ASCII", "strict")) if connectionchatty: if support.verbose: Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Wed Nov 25 19:55:32 2009 @@ -140,6 +140,8 @@ Library ------- +- Issue #7133: SSL objects now support the new buffer API. + - Issue #1488943: difflib.Differ() doesn't always add hints for tab characters - Issue #6123: tarfile now opens empty archives correctly and consistently Modified: python/branches/py3k/Modules/_ssl.c ============================================================================== --- python/branches/py3k/Modules/_ssl.c (original) +++ python/branches/py3k/Modules/_ssl.c Wed Nov 25 19:55:32 2009 @@ -1146,9 +1146,8 @@ static PyObject *PySSL_SSLwrite(PySSLObject *self, PyObject *args) { - char *data; + Py_buffer buf; int len; - int count; int sockstate; int err; int nonblocking; @@ -1161,7 +1160,7 @@ return NULL; } - if (!PyArg_ParseTuple(args, "y#:write", &data, &count)) + if (!PyArg_ParseTuple(args, "y*:write", &buf)) return NULL; /* just in case the blocking state of the socket has been changed */ @@ -1173,24 +1172,24 @@ if (sockstate == SOCKET_HAS_TIMED_OUT) { PyErr_SetString(PySSLErrorObject, "The write operation timed out"); - return NULL; + goto error; } else if (sockstate == SOCKET_HAS_BEEN_CLOSED) { PyErr_SetString(PySSLErrorObject, "Underlying socket has been closed."); - return NULL; + goto error; } else if (sockstate == SOCKET_TOO_LARGE_FOR_SELECT) { PyErr_SetString(PySSLErrorObject, "Underlying socket too large for select()."); - return NULL; + goto error; } do { err = 0; PySSL_BEGIN_ALLOW_THREADS - len = SSL_write(self->ssl, data, count); + len = SSL_write(self->ssl, buf.buf, buf.len); err = SSL_get_error(self->ssl, len); PySSL_END_ALLOW_THREADS - if(PyErr_CheckSignals()) { - return NULL; + if (PyErr_CheckSignals()) { + goto error; } if (err == SSL_ERROR_WANT_READ) { sockstate = @@ -1204,19 +1203,25 @@ if (sockstate == SOCKET_HAS_TIMED_OUT) { PyErr_SetString(PySSLErrorObject, "The write operation timed out"); - return NULL; + goto error; } else if (sockstate == SOCKET_HAS_BEEN_CLOSED) { PyErr_SetString(PySSLErrorObject, "Underlying socket has been closed."); - return NULL; + goto error; } else if (sockstate == SOCKET_IS_NONBLOCKING) { break; } } while (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE); + + PyBuffer_Release(&buf); if (len > 0) return PyLong_FromLong(len); else return PySSL_SetError(self, len, __FILE__, __LINE__); + +error: + PyBuffer_Release(&buf); + return NULL; } PyDoc_STRVAR(PySSL_SSLwrite_doc, _______________________________________________ Python-checkins mailing list Python-checkins [at] python http://mail.python.org/mailman/listinfo/python-checkins
|