| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,2 @@ | |||
| 1 | + Ensure that MD5 and SHA* objects are properly GC-untracked before freeing | ||
| 2 | + their internal HACL* state. Patch by Bénédikt Tran. | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -77,6 +77,7 @@ newMD5object(MD5State * st) | |||
| 77 | 77 | return NULL; | |
| 78 | 78 | } | |
| 79 | 79 | HASHLIB_INIT_MUTEX(md5); | |
| 80 | + md5->hash_state = NULL; // PyObject_GC_New() does not zero memory | ||
| 80 | 81 | ||
| 81 | 82 | PyObject_GC_Track(md5); | |
| 82 | 83 | return md5; | |
@@ -86,13 +87,13 @@ newMD5object(MD5State * st) | |||
| 86 | 87 | static void | |
| 87 | 88 | MD5_dealloc(PyObject *op) | |
| 88 | 89 | { | |
| 90 | + PyTypeObject *tp = Py_TYPE(op); | ||
| 91 | + PyObject_GC_UnTrack(op); | ||
| 89 | 92 | MD5object *ptr = _MD5object_CAST(op); | |
| 90 | 93 | if (ptr->hash_state != NULL) { | |
| 91 | 94 | Hacl_Hash_MD5_free(ptr->hash_state); | |
| 92 | 95 | ptr->hash_state = NULL; | |
| 93 | 96 | } | |
| 94 | - PyTypeObject *tp = Py_TYPE(op); | ||
| 95 | - PyObject_GC_UnTrack(ptr); | ||
| 96 | 97 | PyObject_GC_Del(ptr); | |
| 97 | 98 | Py_DECREF(tp); | |
| 98 | 99 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -75,6 +75,7 @@ newSHA1object(SHA1State *st) | |||
| 75 | 75 | return NULL; | |
| 76 | 76 | } | |
| 77 | 77 | HASHLIB_INIT_MUTEX(sha); | |
| 78 | + sha->hash_state = NULL; // PyObject_GC_New() does not zero memory | ||
| 78 | 79 | ||
| 79 | 80 | PyObject_GC_Track(sha); | |
| 80 | 81 | return sha; | |
@@ -85,13 +86,13 @@ newSHA1object(SHA1State *st) | |||
| 85 | 86 | static void | |
| 86 | 87 | SHA1_dealloc(PyObject *op) | |
| 87 | 88 | { | |
| 89 | + PyTypeObject *tp = Py_TYPE(op); | ||
| 90 | + PyObject_GC_UnTrack(op); | ||
| 88 | 91 | SHA1object *ptr = _SHA1object_CAST(op); | |
| 89 | 92 | if (ptr->hash_state != NULL) { | |
| 90 | 93 | Hacl_Hash_SHA1_free(ptr->hash_state); | |
| 91 | 94 | ptr->hash_state = NULL; | |
| 92 | 95 | } | |
| 93 | - PyTypeObject *tp = Py_TYPE(ptr); | ||
| 94 | - PyObject_GC_UnTrack(ptr); | ||
| 95 | 96 | PyObject_GC_Del(ptr); | |
| 96 | 97 | Py_DECREF(tp); | |
| 97 | 98 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -146,6 +146,7 @@ newSHA384object(sha2_state *state) | |||
| 146 | 146 | return NULL; | |
| 147 | 147 | } | |
| 148 | 148 | HASHLIB_INIT_MUTEX(sha); | |
| 149 | + sha->state = NULL; // PyObject_GC_New() does not zero memory | ||
| 149 | 150 | ||
| 150 | 151 | PyObject_GC_Track(sha); | |
| 151 | 152 | return sha; | |
@@ -159,6 +160,7 @@ newSHA512object(sha2_state *state) | |||
| 159 | 160 | return NULL; | |
| 160 | 161 | } | |
| 161 | 162 | HASHLIB_INIT_MUTEX(sha); | |
| 163 | + sha->state = NULL; // PyObject_GC_New() does not zero memory | ||
| 162 | 164 | ||
| 163 | 165 | PyObject_GC_Track(sha); | |
| 164 | 166 | return sha; | |
@@ -168,27 +170,27 @@ newSHA512object(sha2_state *state) | |||
| 168 | 170 | static void | |
| 169 | 171 | SHA256_dealloc(PyObject *op) | |
| 170 | 172 | { | |
| 173 | + PyTypeObject *tp = Py_TYPE(op); | ||
| 174 | + PyObject_GC_UnTrack(op); | ||
| 171 | 175 | SHA256object *ptr = _SHA256object_CAST(op); | |
| 172 | 176 | if (ptr->state != NULL) { | |
| 173 | 177 | Hacl_Hash_SHA2_free_256(ptr->state); | |
| 174 | 178 | ptr->state = NULL; | |
| 175 | 179 | } | |
| 176 | - PyTypeObject *tp = Py_TYPE(ptr); | ||
| 177 | - PyObject_GC_UnTrack(ptr); | ||
| 178 | 180 | PyObject_GC_Del(ptr); | |
| 179 | 181 | Py_DECREF(tp); | |
| 180 | 182 | } | |
| 181 | 183 | ||
| 182 | 184 | static void | |
| 183 | 185 | SHA512_dealloc(PyObject *op) | |
| 184 | 186 | { | |
| 187 | + PyTypeObject *tp = Py_TYPE(op); | ||
| 188 | + PyObject_GC_UnTrack(op); | ||
| 185 | 189 | SHA512object *ptr = _SHA512object_CAST(op); | |
| 186 | 190 | if (ptr->state != NULL) { | |
| 187 | 191 | Hacl_Hash_SHA2_free_512(ptr->state); | |
| 188 | 192 | ptr->state = NULL; | |
| 189 | 193 | } | |
| 190 | - PyTypeObject *tp = Py_TYPE(ptr); | ||
| 191 | - PyObject_GC_UnTrack(ptr); | ||
| 192 | 194 | PyObject_GC_Del(ptr); | |
| 193 | 195 | Py_DECREF(tp); | |
| 194 | 196 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -102,6 +102,7 @@ newSHA3object(PyTypeObject *type) | |||
| 102 | 102 | return NULL; | |
| 103 | 103 | } | |
| 104 | 104 | HASHLIB_INIT_MUTEX(newobj); | |
| 105 | + newobj->hash_state = NULL; // PyObject_GC_New() does not zero memory | ||
| 105 | 106 | newobj->digest_size = newobj->block_size = 0; | |
| 106 | 107 | PyObject_GC_Track(newobj); | |
| 107 | 108 | return newobj; | |
@@ -234,7 +235,7 @@ SHA3_dealloc(PyObject *self) | |||
| 234 | 235 | PyTypeObject *tp = Py_TYPE(self); | |
| 235 | 236 | PyObject_GC_UnTrack(self); | |
| 236 | 237 | (void)SHA3_clear(self); | |
| 237 | - tp->tp_free(self); | ||
| 238 | + PyObject_GC_Del(self); | ||
| 238 | 239 | Py_DECREF(tp); | |
| 239 | 240 | } | |
| 240 | 241 | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments