Skip to content

Commit 586c906

Browse files
committed
Revert "[3.13] gh-116946: fully implement GC protocol for _hashlib objects (GH-138289) (#138326)"
This reverts commit 21b5932.
1 parent 505032c commit 586c906

File tree

1 file changed

+23
-68
lines changed

1 file changed

+23
-68
lines changed

Modules/_hashopenssl.c

Lines changed: 23 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -282,8 +282,6 @@ typedef struct {
282282
PyMutex mutex; /* OpenSSL context lock */
283283
} EVPobject;
284284

285-
#define EVPobject_CAST(op) ((EVPobject *)(op))
286-
287285
typedef struct {
288286
PyObject_HEAD
289287
HMAC_CTX *ctx; /* OpenSSL hmac context */
@@ -292,8 +290,6 @@ typedef struct {
292290
PyMutex mutex; /* HMAC context lock */
293291
} HMACobject;
294292

295-
#define HMACobject_CAST(op) ((HMACobject *)(op))
296-
297293
#include "clinic/_hashopenssl.c.h"
298294
/*[clinic input]
299295
module _hashlib
@@ -501,9 +497,7 @@ py_digest_by_digestmod(PyObject *module, PyObject *digestmod, enum Py_hash_type
501497
static EVPobject *
502498
newEVPobject(PyTypeObject *type)
503499
{
504-
assert(type != NULL);
505-
assert(type->tp_alloc != NULL);
506-
EVPobject *retval = (EVPobject *)type->tp_alloc(type, 0);
500+
EVPobject *retval = (EVPobject *)PyObject_New(EVPobject, type);
507501
if (retval == NULL) {
508502
return NULL;
509503
}
@@ -542,23 +536,14 @@ EVP_hash(EVPobject *self, const void *vp, Py_ssize_t len)
542536
/* Internal methods for a hash object */
543537

544538
static void
545-
EVP_dealloc(PyObject *op)
539+
EVP_dealloc(EVPobject *self)
546540
{
547-
PyTypeObject *tp = Py_TYPE(op);
548-
PyObject_GC_UnTrack(op);
549-
EVPobject *self = EVPobject_CAST(op);
541+
PyTypeObject *tp = Py_TYPE(self);
550542
EVP_MD_CTX_free(self->ctx);
551-
tp->tp_free(self);
543+
PyObject_Free(self);
552544
Py_DECREF(tp);
553545
}
554546

555-
static int
556-
EVP_traverse(PyObject *op, visitproc visit, void *arg)
557-
{
558-
Py_VISIT(Py_TYPE(op));
559-
return 0;
560-
}
561-
562547
static int
563548
locked_EVP_MD_CTX_copy(EVP_MD_CTX *new_ctx_p, EVPobject *self)
564549
{
@@ -796,7 +781,6 @@ PyDoc_STRVAR(hashtype_doc,
796781

797782
static PyType_Slot EVPtype_slots[] = {
798783
{Py_tp_dealloc, EVP_dealloc},
799-
{Py_tp_traverse, EVP_traverse},
800784
{Py_tp_repr, EVP_repr},
801785
{Py_tp_doc, (char *)hashtype_doc},
802786
{Py_tp_methods, EVP_methods},
@@ -805,16 +789,11 @@ static PyType_Slot EVPtype_slots[] = {
805789
};
806790

807791
static PyType_Spec EVPtype_spec = {
808-
.name = "_hashlib.HASH",
809-
.basicsize = sizeof(EVPobject),
810-
.flags = (
811-
Py_TPFLAGS_DEFAULT
812-
| Py_TPFLAGS_BASETYPE
813-
| Py_TPFLAGS_DISALLOW_INSTANTIATION
814-
| Py_TPFLAGS_IMMUTABLETYPE
815-
| Py_TPFLAGS_HAVE_GC
816-
),
817-
.slots = EVPtype_slots
792+
"_hashlib.HASH", /*tp_name*/
793+
sizeof(EVPobject), /*tp_basicsize*/
794+
0, /*tp_itemsize*/
795+
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE,
796+
EVPtype_slots
818797
};
819798

820799
#ifdef PY_OPENSSL_HAS_SHAKE
@@ -955,25 +934,18 @@ PyDoc_STRVAR(hashxoftype_doc,
955934
"digest_size -- number of bytes in this hashes output");
956935

957936
static PyType_Slot EVPXOFtype_slots[] = {
958-
{Py_tp_dealloc, EVP_dealloc},
959-
{Py_tp_traverse, EVP_traverse},
960937
{Py_tp_doc, (char *)hashxoftype_doc},
961938
{Py_tp_methods, EVPXOF_methods},
962939
{Py_tp_getset, EVPXOF_getseters},
963940
{0, 0},
964941
};
965942

966943
static PyType_Spec EVPXOFtype_spec = {
967-
.name = "_hashlib.HASHXOF",
968-
.basicsize = sizeof(EVPobject),
969-
.flags = (
970-
Py_TPFLAGS_DEFAULT
971-
| Py_TPFLAGS_BASETYPE
972-
| Py_TPFLAGS_DISALLOW_INSTANTIATION
973-
| Py_TPFLAGS_IMMUTABLETYPE
974-
| Py_TPFLAGS_HAVE_GC
975-
),
976-
.slots = EVPXOFtype_slots
944+
"_hashlib.HASHXOF", /*tp_name*/
945+
sizeof(EVPobject), /*tp_basicsize*/
946+
0, /*tp_itemsize*/
947+
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE,
948+
EVPXOFtype_slots
977949
};
978950

979951

@@ -1687,8 +1659,7 @@ _hashlib_hmac_new_impl(PyObject *module, Py_buffer *key, PyObject *msg_obj,
16871659
}
16881660

16891661
_hashlibstate *state = get_hashlib_state(module);
1690-
assert(state->HMACtype != NULL);
1691-
self = (HMACobject *)state->HMACtype->tp_alloc(state->HMACtype, 0);
1662+
self = PyObject_New(HMACobject, state->HMACtype);
16921663
if (self == NULL) {
16931664
goto error;
16941665
}
@@ -1793,8 +1764,7 @@ _hashlib_HMAC_copy_impl(HMACobject *self)
17931764
return NULL;
17941765
}
17951766

1796-
PyTypeObject *type = Py_TYPE(self);
1797-
retval = (HMACobject *)type->tp_alloc(type, 0);
1767+
retval = PyObject_New(HMACobject, Py_TYPE(self));
17981768
if (retval == NULL) {
17991769
HMAC_CTX_free(ctx);
18001770
return NULL;
@@ -1806,26 +1776,17 @@ _hashlib_HMAC_copy_impl(HMACobject *self)
18061776
}
18071777

18081778
static void
1809-
_hmac_dealloc(PyObject *op)
1779+
_hmac_dealloc(HMACobject *self)
18101780
{
1811-
PyTypeObject *tp = Py_TYPE(op);
1812-
PyObject_GC_UnTrack(op);
1813-
HMACobject *self = HMACobject_CAST(op);
1781+
PyTypeObject *tp = Py_TYPE(self);
18141782
if (self->ctx != NULL) {
18151783
HMAC_CTX_free(self->ctx);
18161784
self->ctx = NULL;
18171785
}
1818-
tp->tp_free(self);
1786+
PyObject_Free(self);
18191787
Py_DECREF(tp);
18201788
}
18211789

1822-
static int
1823-
_hmac_traverse(PyObject *op, visitproc visit, void *arg)
1824-
{
1825-
Py_VISIT(Py_TYPE(op));
1826-
return 0;
1827-
}
1828-
18291790
static PyObject *
18301791
_hmac_repr(HMACobject *self)
18311792
{
@@ -1993,22 +1954,16 @@ digest_size -- number of bytes in digest() output\n");
19931954
static PyType_Slot HMACtype_slots[] = {
19941955
{Py_tp_doc, (char *)hmactype_doc},
19951956
{Py_tp_repr, (reprfunc)_hmac_repr},
1996-
{Py_tp_dealloc, _hmac_dealloc},
1997-
{Py_tp_traverse, _hmac_traverse},
1957+
{Py_tp_dealloc,(destructor)_hmac_dealloc},
19981958
{Py_tp_methods, HMAC_methods},
19991959
{Py_tp_getset, HMAC_getset},
20001960
{0, NULL}
20011961
};
20021962

20031963
PyType_Spec HMACtype_spec = {
2004-
.name = "_hashlib.HMAC",
2005-
.basicsize = sizeof(HMACobject),
2006-
.flags = (
2007-
Py_TPFLAGS_DEFAULT
2008-
| Py_TPFLAGS_DISALLOW_INSTANTIATION
2009-
| Py_TPFLAGS_IMMUTABLETYPE
2010-
| Py_TPFLAGS_HAVE_GC
2011-
),
1964+
"_hashlib.HMAC", /* name */
1965+
sizeof(HMACobject), /* basicsize */
1966+
.flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE,
20121967
.slots = HMACtype_slots,
20131968
};
20141969

0 commit comments

Comments
 (0)