Skip to content

Commit 530411f

Browse files
committed
TODO Undesirable: revert python#114573
This concurrency fix needs reworking for use with BoringSSL.
1 parent cb56dc5 commit 530411f

File tree

2 files changed

+5
-64
lines changed

2 files changed

+5
-64
lines changed

Misc/NEWS.d/next/Security/2024-01-26-22-14-09.gh-issue-114572.t1QMQD.rst

Lines changed: 0 additions & 4 deletions
This file was deleted.

Modules/_ssl.c

Lines changed: 5 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -4573,50 +4573,6 @@ set_sni_callback(PySSLContext *self, PyObject *arg, void *c)
45734573
return 0;
45744574
}
45754575

4576-
#if OPENSSL_VERSION_NUMBER < 0x30300000L
4577-
static X509_OBJECT *x509_object_dup(const X509_OBJECT *obj)
4578-
{
4579-
int ok;
4580-
X509_OBJECT *ret = X509_OBJECT_new();
4581-
if (ret == NULL) {
4582-
return NULL;
4583-
}
4584-
switch (X509_OBJECT_get_type(obj)) {
4585-
case X509_LU_X509:
4586-
ok = X509_OBJECT_set1_X509(ret, X509_OBJECT_get0_X509(obj));
4587-
break;
4588-
case X509_LU_CRL:
4589-
/* X509_OBJECT_get0_X509_CRL was not const-correct prior to 3.0.*/
4590-
ok = X509_OBJECT_set1_X509_CRL(
4591-
ret, X509_OBJECT_get0_X509_CRL((X509_OBJECT *)obj));
4592-
break;
4593-
default:
4594-
/* We cannot duplicate unrecognized types in a polyfill, but it is
4595-
* safe to leave an empty object. The caller will ignore it. */
4596-
ok = 1;
4597-
break;
4598-
}
4599-
if (!ok) {
4600-
X509_OBJECT_free(ret);
4601-
return NULL;
4602-
}
4603-
return ret;
4604-
}
4605-
4606-
static STACK_OF(X509_OBJECT) *
4607-
X509_STORE_get1_objects(X509_STORE *store)
4608-
{
4609-
STACK_OF(X509_OBJECT) *ret;
4610-
if (!X509_STORE_lock(store)) {
4611-
return NULL;
4612-
}
4613-
ret = sk_X509_OBJECT_deep_copy(X509_STORE_get0_objects(store),
4614-
x509_object_dup, X509_OBJECT_free);
4615-
X509_STORE_unlock(store);
4616-
return ret;
4617-
}
4618-
#endif
4619-
46204576
PyDoc_STRVAR(PySSLContext_sni_callback_doc,
46214577
"Set a callback that will be called when a server name is provided by the SSL/TLS client in the SNI extension.\n\
46224578
\n\
@@ -4646,12 +4602,7 @@ _ssl__SSLContext_cert_store_stats_impl(PySSLContext *self)
46464602
int x509 = 0, crl = 0, ca = 0, i;
46474603

46484604
store = SSL_CTX_get_cert_store(self->ctx);
4649-
objs = X509_STORE_get1_objects(store);
4650-
if (objs == NULL) {
4651-
PyErr_SetString(PyExc_MemoryError, "failed to query cert store");
4652-
return NULL;
4653-
}
4654-
4605+
objs = X509_STORE_get0_objects(store);
46554606
for (i = 0; i < sk_X509_OBJECT_num(objs); i++) {
46564607
obj = sk_X509_OBJECT_value(objs, i);
46574608
switch (X509_OBJECT_get_type(obj)) {
@@ -4665,11 +4616,12 @@ _ssl__SSLContext_cert_store_stats_impl(PySSLContext *self)
46654616
crl++;
46664617
break;
46674618
default:
4668-
/* Ignore unrecognized types. */
4619+
/* Ignore X509_LU_FAIL, X509_LU_RETRY, X509_LU_PKEY.
4620+
* As far as I can tell they are internal states and never
4621+
* stored in a cert store */
46694622
break;
46704623
}
46714624
}
4672-
sk_X509_OBJECT_pop_free(objs, X509_OBJECT_free);
46734625
return Py_BuildValue("{sisisi}", "x509", x509, "crl", crl,
46744626
"x509_ca", ca);
46754627
}
@@ -4701,12 +4653,7 @@ _ssl__SSLContext_get_ca_certs_impl(PySSLContext *self, int binary_form)
47014653
}
47024654

47034655
store = SSL_CTX_get_cert_store(self->ctx);
4704-
objs = X509_STORE_get1_objects(store);
4705-
if (objs == NULL) {
4706-
PyErr_SetString(PyExc_MemoryError, "failed to query cert store");
4707-
goto error;
4708-
}
4709-
4656+
objs = X509_STORE_get0_objects(store);
47104657
for (i = 0; i < sk_X509_OBJECT_num(objs); i++) {
47114658
X509_OBJECT *obj;
47124659
X509 *cert;
@@ -4734,11 +4681,9 @@ _ssl__SSLContext_get_ca_certs_impl(PySSLContext *self, int binary_form)
47344681
}
47354682
Py_CLEAR(ci);
47364683
}
4737-
sk_X509_OBJECT_pop_free(objs, X509_OBJECT_free);
47384684
return rlist;
47394685

47404686
error:
4741-
sk_X509_OBJECT_pop_free(objs, X509_OBJECT_free);
47424687
Py_XDECREF(ci);
47434688
Py_XDECREF(rlist);
47444689
return NULL;

0 commit comments

Comments
 (0)