mirror of
https://github.com/python/cpython.git
synced 2026-04-13 23:31:02 +00:00
gh-145301: Fix double-free in hashlib and hmac module initialization (GH-145321)
gh-145301: Fix double-free in hashlib and hmac initialization
This commit is contained in:
parent
8b54313670
commit
6acaf659ef
4 changed files with 18 additions and 11 deletions
|
|
@ -0,0 +1,2 @@
|
|||
:mod:`hashlib`: fix a crash when the initialization of the underlying C
|
||||
extension module fails.
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
:mod:`hmac`: fix a crash when the initialization of the underlying C
|
||||
extension module fails.
|
||||
|
|
@ -268,7 +268,7 @@ py_hashentry_table_new(void) {
|
|||
|
||||
if (h->py_alias != NULL) {
|
||||
if (_Py_hashtable_set(ht, (const void*)entry->py_alias, (void*)entry) < 0) {
|
||||
PyMem_Free(entry);
|
||||
/* entry is already in ht, will be freed by _Py_hashtable_destroy() */
|
||||
goto error;
|
||||
}
|
||||
entry->refcnt++;
|
||||
|
|
|
|||
|
|
@ -1453,16 +1453,19 @@ py_hmac_hinfo_ht_new(void)
|
|||
assert(value->display_name == NULL);
|
||||
value->refcnt = 0;
|
||||
|
||||
#define Py_HMAC_HINFO_LINK(KEY) \
|
||||
do { \
|
||||
int rc = py_hmac_hinfo_ht_add(table, KEY, value); \
|
||||
if (rc < 0) { \
|
||||
PyMem_Free(value); \
|
||||
goto error; \
|
||||
} \
|
||||
else if (rc == 1) { \
|
||||
value->refcnt++; \
|
||||
} \
|
||||
#define Py_HMAC_HINFO_LINK(KEY) \
|
||||
do { \
|
||||
int rc = py_hmac_hinfo_ht_add(table, (KEY), value); \
|
||||
if (rc < 0) { \
|
||||
/* entry may already be in ht, freed upon exit */ \
|
||||
if (value->refcnt == 0) { \
|
||||
PyMem_Free(value); \
|
||||
} \
|
||||
goto error; \
|
||||
} \
|
||||
else if (rc == 1) { \
|
||||
value->refcnt++; \
|
||||
} \
|
||||
} while (0)
|
||||
Py_HMAC_HINFO_LINK(e->name);
|
||||
Py_HMAC_HINFO_LINK(e->hashlib_name);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue