Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit74da6f7

Browse files
authored
gh-105927: _ssl uses _PyWeakref_GET_REF() (#105965)
1 parentc5a722b commit74da6f7

File tree

2 files changed

+29
-18
lines changed

2 files changed

+29
-18
lines changed

‎Modules/_ssl.c

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
http://bugs.python.org/issue8108#msg102867 ?
1515
*/
1616

17+
#ifndefPy_BUILD_CORE_BUILTIN
18+
# definePy_BUILD_CORE_MODULE 1
19+
#endif
20+
1721
/* Don't warn about deprecated functions, */
1822
#ifndefOPENSSL_API_COMPAT
1923
// 0x10101000L == 1.1.1, 30000 == 3.0.0
@@ -24,6 +28,7 @@
2428
#definePY_SSIZE_T_CLEAN
2529

2630
#include"Python.h"
31+
#include"pycore_weakref.h"// _PyWeakref_GET_REF()
2732

2833
/* Include symbols from _socket module */
2934
#include"socketmodule.h"
@@ -379,8 +384,14 @@ typedef enum {
379384
#defineERRSTR(x) ERRSTR1("_ssl.c", Py_STRINGIFY(__LINE__), x)
380385

381386
/* Get the socket from a PySSLSocket, if it has one */
382-
#defineGET_SOCKET(obj) ((obj)->Socket ? \
383-
(PySocketSockObject *) PyWeakref_GetObject((obj)->Socket) : NULL)
387+
staticinlinePySocketSockObject*GET_SOCKET(PySSLSocket*obj) {
388+
if (obj->Socket) {
389+
return (PySocketSockObject*)PyWeakref_GetObject(obj->Socket);
390+
}
391+
else {
392+
returnNULL;
393+
}
394+
}
384395

385396
/* If sock is NULL, use a timeout of 0 second */
386397
#defineGET_SOCKET_TIMEOUT(sock) \
@@ -2177,13 +2188,14 @@ PyDoc_STRVAR(PySSL_get_server_hostname_doc,
21772188
staticPyObject*
21782189
PySSL_get_owner(PySSLSocket*self,void*c)
21792190
{
2180-
PyObject*owner;
2181-
2182-
if (self->owner==NULL)
2191+
if (self->owner==NULL) {
21832192
Py_RETURN_NONE;
2184-
2185-
owner=PyWeakref_GetObject(self->owner);
2186-
returnPy_NewRef(owner);
2193+
}
2194+
PyObject*owner=_PyWeakref_GET_REF(self->owner);
2195+
if (owner==NULL) {
2196+
Py_RETURN_NONE;
2197+
}
2198+
returnowner;
21872199
}
21882200

21892201
staticint
@@ -4393,14 +4405,13 @@ _servername_callback(SSL *s, int *al, void *args)
43934405
* will be passed. If both do not exist only then the C-level object is
43944406
* passed. */
43954407
if (ssl->owner)
4396-
ssl_socket=PyWeakref_GetObject(ssl->owner);
4408+
ssl_socket=_PyWeakref_GET_REF(ssl->owner);
43974409
elseif (ssl->Socket)
4398-
ssl_socket=PyWeakref_GetObject(ssl->Socket);
4410+
ssl_socket=_PyWeakref_GET_REF(ssl->Socket);
43994411
else
4400-
ssl_socket=(PyObject*)ssl;
4412+
ssl_socket=Py_NewRef(ssl);
44014413

4402-
Py_INCREF(ssl_socket);
4403-
if (ssl_socket==Py_None)
4414+
if (ssl_socket==NULL)
44044415
gotoerror;
44054416

44064417
if (servername==NULL) {

‎Modules/_ssl/debughelpers.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ _PySSL_msg_callback(int write_p, int version, int content_type,
1515
PyGILState_STATEthreadstate;
1616
PyObject*res=NULL;
1717
PySSLSocket*ssl_obj=NULL;/* ssl._SSLSocket, borrowed ref */
18-
PyObject*ssl_socket=NULL;/* ssl.SSLSocket or ssl.SSLObject */
1918
intmsg_type;
2019

2120
threadstate=PyGILState_Ensure();
@@ -27,13 +26,14 @@ _PySSL_msg_callback(int write_p, int version, int content_type,
2726
return;
2827
}
2928

29+
PyObject*ssl_socket;/* ssl.SSLSocket or ssl.SSLObject */
3030
if (ssl_obj->owner)
31-
ssl_socket=PyWeakref_GetObject(ssl_obj->owner);
31+
ssl_socket=_PyWeakref_GET_REF(ssl_obj->owner);
3232
elseif (ssl_obj->Socket)
33-
ssl_socket=PyWeakref_GetObject(ssl_obj->Socket);
33+
ssl_socket=_PyWeakref_GET_REF(ssl_obj->Socket);
3434
else
35-
ssl_socket= (PyObject*)ssl_obj;
36-
Py_INCREF(ssl_socket);
35+
ssl_socket= (PyObject*)Py_NewRef(ssl_obj);
36+
assert(ssl_socket!=NULL);// _PyWeakref_GET_REF() can return NULL
3737

3838
/* assume that OpenSSL verifies all payload and buf len is of sufficient
3939
length */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp