@@ -462,11 +462,11 @@ set_lookkey_threadsafe(PySetObject *so, PyObject *key, Py_hash_t hash)
462462}
463463#endif 
464464
465- static  void  free_entries (setentry  * entries , bool  use_qsbr )
465+ static  void  free_entries (setentry  * entries , size_t   size ,  bool  use_qsbr )
466466{
467467#ifdef  Py_GIL_DISABLED 
468468    if  (use_qsbr ) {
469-         _PyMem_FreeDelayed (entries );
469+         _PyMem_FreeDelayed (entries ,  size   *   sizeof ( setentry ) );
470470        return ;
471471    }
472472#endif 
@@ -483,6 +483,7 @@ set_table_resize(PySetObject *so, Py_ssize_t minused)
483483{
484484    setentry  * oldtable , * newtable , * entry ;
485485    Py_ssize_t  oldmask  =  so -> mask ;
486+     Py_ssize_t  oldsize  =  (size_t )oldmask  +  1 ;
486487    size_t  newmask ;
487488    int  is_oldtable_malloced ;
488489    setentry  small_copy [PySet_MINSIZE ];
@@ -555,7 +556,7 @@ set_table_resize(PySetObject *so, Py_ssize_t minused)
555556    FT_ATOMIC_STORE_PTR_RELEASE (so -> table , newtable );
556557
557558    if  (is_oldtable_malloced )
558-         free_entries (oldtable , SET_IS_SHARED (so ));
559+         free_entries (oldtable , oldsize ,  SET_IS_SHARED (so ));
559560    return  0 ;
560561}
561562
@@ -647,6 +648,7 @@ set_clear_internal(PyObject *self)
647648    setentry  * table  =  so -> table ;
648649    Py_ssize_t  fill  =  so -> fill ;
649650    Py_ssize_t  used  =  so -> used ;
651+     Py_ssize_t  oldsize  =  (size_t )so -> mask  +  1 ;
650652    int  table_is_malloced  =  table  !=  so -> smalltable ;
651653    setentry  small_copy [PySet_MINSIZE ];
652654
@@ -685,7 +687,7 @@ set_clear_internal(PyObject *self)
685687    }
686688
687689    if  (table_is_malloced )
688-         free_entries (table , SET_IS_SHARED (so ));
690+         free_entries (table , oldsize ,  SET_IS_SHARED (so ));
689691    return  0 ;
690692}
691693
@@ -732,6 +734,7 @@ set_dealloc(PyObject *self)
732734    PySetObject  * so  =  _PySet_CAST (self );
733735    setentry  * entry ;
734736    Py_ssize_t  used  =  so -> used ;
737+     Py_ssize_t  oldsize  =  (size_t )so -> mask  +  1 ;
735738
736739    /* bpo-31095: UnTrack is needed before calling any callbacks */ 
737740    PyObject_GC_UnTrack (so );
@@ -744,7 +747,7 @@ set_dealloc(PyObject *self)
744747        }
745748    }
746749    if  (so -> table  !=  so -> smalltable )
747-         free_entries (so -> table , SET_IS_SHARED (so ));
750+         free_entries (so -> table , oldsize ,  SET_IS_SHARED (so ));
748751    Py_TYPE (so )-> tp_free (so );
749752}
750753
0 commit comments