8000 do not guard against empty buffers for now · python/cpython@db57278 · GitHub
[go: up one dir, main page]

Skip to content

Commit db57278

Browse files
committed
do not guard against empty buffers for now
1 parent 05c1e66 commit db57278

File tree

7 files changed

+66
-95
lines changed

7 files changed

+66
-95
lines changed

Modules/_hashopenssl.c

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -800,16 +800,16 @@ static PyObject *
800800
_hashlib_HASH_update_impl(HASHobject *self, PyObject *obj)
801801
/*[clinic end generated code: output=62ad989754946b86 input=aa1ce20e3f92ceb6]*/
802802
{
803-
int rc;
803+
int result;
804804
Py_buffer view;
805805
GET_BUFFER_VIEW_OR_ERROUT(obj, &view);
806806
Py_BEGIN_ALLOW_THREADS
807807
HASHLIB_ACQUIRE_LOCK(self);
808-
rc = _hashlib_HASH_hash(self, view.buf, view.len);
808+
result = _hashlib_HASH_hash(self, view.buf, view.len);
809809
HASHLIB_RELEASE_LOCK(self);
810810
Py_END_ALLOW_THREADS
811811
PyBuffer_Release(&view);
812-
return rc < 0 ? NULL : Py_None;
812+
return result < 0 ? NULL : Py_None;
813813
}
814814

815815
static PyMethodDef HASH_methods[] = {
@@ -1806,19 +1806,17 @@ _hashlib_hmac_digest_size(HMACobject *self)
18061806
static int
18071807
_hmac_update(HMACobject *self, PyObject *obj)
18081808
{
1809-
int r = 1;
1809+
int r;
18101810
Py_buffer view = {0};
18111811

18121812
GET_BUFFER_VIEW_OR_ERROR(obj, &view, return 0);
1813-
if (view.len > 0) {
1814-
Py_BEGIN_ALLOW_THREADS
1815-
HASHLIB_ACQUIRE_LOCK(self);
1816-
r = HMAC_Update(self->ctx,
1817-
(const unsigned char *)view.buf,
1818-
(size_t)view.len);
1819-
HASHLIB_RELEASE_LOCK(self);
1820-
Py_END_ALLOW_THREADS
1821-
}
1813+
Py_BEGIN_ALLOW_THREADS
1814+
HASHLIB_ACQUIRE_LOCK(self);
1815+
r = HMAC_Update(self->ctx,
1816+
(const unsigned char *)view.buf,
1817+
(size_t)view.len);
1818+
HASHLIB_RELEASE_LOCK(self);
1819+
Py_END_ALLOW_THREADS
18221820
PyBuffer_Release(&view);
18231821

18241822
if (r == 0) {

Modules/blake2module.c

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -642,11 +642,9 @@ py_blake2_new(PyTypeObject *type, PyObject *data, int digest_size,
642642
if (data != NULL) {
643643
Py_buffer buf;
644644
GET_BUFFER_VIEW_OR_ERROR(data, &buf, goto error);
645-
if (buf.len > 0) {
646-
Py_BEGIN_ALLOW_THREADS
647-
blake2_update_state_unlocked(self, buf.buf, buf.len);
648-
Py_END_ALLOW_THREADS
649-
}
645+
Py_BEGIN_ALLOW_THREADS
646+
blake2_update_state_unlocked(self, buf.buf, buf.len);
647+
Py_END_ALLOW_THREADS
650648
PyBuffer_Release(&buf);
651649
}
652650

@@ -819,13 +817,11 @@ _blake2_blake2b_update_impl(Blake2Object *self, PyObject *data)
819817
{
820818
Py_buffer buf;
821819
GET_BUFFER_VIEW_OR_ERROUT(data, &buf);
822-
if (buf.len > 0) {
823-
Py_BEGIN_ALLOW_THREADS
824-
HASHLIB_ACQUIRE_LOCK(self);
825-
blake2_update_state_unlocked(self, buf.buf, buf.len);
826-
HASHLIB_RELEASE_LOCK(self);
827-
Py_END_ALLOW_THREADS
828-
}
820+
Py_BEGIN_ALLOW_THREADS
821+
HASHLIB_ACQUIRE_LOCK(self);
822+
blake2_update_state_unlocked(self, buf.buf, buf.len);
823+
HASHLIB_RELEASE_LOCK(self);
824+
Py_END_ALLOW_THREADS
829825
PyBuffer_Release(&buf);
830826
Py_RETURN_NONE;
831827
}

Modules/hmacmodule.c

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -739,15 +739,12 @@ hmac_feed_initial_data(HMACObject *self, uint8_t *msg, Py_ssize_t len)
739739
{
740740
assert(self->name != NULL);
741741
assert(self->state != NULL);
742-
assert(len >= 0);
743742
int rc = 0;
744-
if (len > 0) {
745-
/* Do not use self->mutex here as this is the constructor
746-
* where it is not yet possible to have concurrent access. */
747-
Py_BEGIN_ALLOW_THREADS
748-
rc = _hacl_hmac_state_update(self->state, msg, len);
749-
Py_END_ALLOW_THREADS
750-
}
743+
/* Do not use self->mutex here as this is the constructor
744+
* where it is not yet possible to have concurrent access. */
745+
Py_BEGIN_ALLOW_THREADS
746+
rc = _hacl_hmac_state_update(self->state, msg, len);
747+
Py_END_ALLOW_THREADS
751748
return rc;
752749
}
753750

@@ -906,13 +903,11 @@ _hmac_HMAC_update_impl(HMACObject *self, PyObject *msgobj)
906903
int rc = 0;
907904
Py_buffer msg;
908905
GET_BUFFER_VIEW_OR_ERROUT(msgobj, &msg);
909-
if (msg.len > 0) {
910-
Py_BEGIN_ALLOW_THREADS
911-
HASHLIB_ACQUIRE_LOCK(self);
912-
rc = _hacl_hmac_state_update(self->state, msg.buf, msg.len);
913-
HASHLIB_RELEASE_LOCK(self);
914-
Py_END_ALLOW_THREADS
915-
}
906+
Py_BEGIN_ALLOW_THREADS
907+
HASHLIB_ACQUIRE_LOCK(self);
908+
rc = _hacl_hmac_state_update(self->state, msg.buf, msg.len);
909+
HASHLIB_RELEASE_LOCK(self);
910+
Py_END_ALLOW_THREADS
916911
PyBuffer_Release(&msg);
917912
return rc < 0 ? NULL : Py_None;
918913
}

Modules/md5module.c

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,6 @@ MD5Type_copy_impl(MD5object *self, PyTypeObject *cls)
123123
return (PyObject *)newobj;
124124
}
125125

126-
static void
127-
md5_digest_compute_with_lock(MD5object *self, uint8_t *digest)
128-
{
129-
HASHLIB_ACQUIRE_LOCK(self);
130-
Hacl_Hash_MD5_digest(self->hash_state, digest);
131-
HASHLIB_RELEASE_LOCK(self);
132-
}
133-
134126
/*[clinic input]
135127
MD5Type.digest
136128
@@ -142,7 +134,9 @@ MD5Type_digest_impl(MD5object *self)
142134
/*[clinic end generated code: output=eb691dc4190a07ec input=bc0c4397c2994be6]*/
143135
{
144136
uint8_t digest[MD5_DIGESTSIZE];
145-
md5_digest_compute_with_lock(self, digest);
137+
HASHLIB_ACQUIRE_LOCK(self);
138+
Hacl_Hash_MD5_digest(self->hash_state, digest);
139+
HASHLIB_RELEASE_LOCK(self);
146140
return PyBytes_FromStringAndSize((const char *)digest, MD5_DIGESTSIZE);
147141
}
148142

@@ -157,7 +151,9 @@ MD5Type_hexdigest_impl(MD5object *self)
157151
/*[clinic end generated code: output=17badced1f3ac932 input=b60b19de644798dd]*/
158152
{
159153
uint8_t digest[MD5_DIGESTSIZE];
160-
md5_digest_compute_with_lock(self, digest);
154+
HASHLIB_ACQUIRE_LOCK(self);
155+
Hacl_Hash_MD5_digest(self->hash_state, digest);
156+
HASHLIB_RELEASE_LOCK(self);
161157
return _Py_strhex((const char *)digest, MD5_DIGESTSIZE);
162158
}
163159

@@ -197,13 +193,11 @@ MD5Type_update_impl(MD5object *self, PyObject *obj)
197193
{
198194
Py_buffer buf;
199195
GET_BUFFER_VIEW_OR_ERROUT(obj, &buf);
200-
if (buf.len > 0) {
201-
Py_BEGIN_ALLOW_THREADS
202-
HASHLIB_ACQUIRE_LOCK(self);
203-
_hacl_md5_state_update(self->hash_state, buf.buf, buf.len);
204-
HASHLIB_RELEASE_LOCK(self);
205-
Py_END_ALLOW_THREADS
206-
}
196+
Py_BEGIN_ALLOW_THREADS
197+
HASHLIB_ACQUIRE_LOCK(self);
198+
_hacl_md5_state_update(self->hash_state, buf.buf, buf.len);
199+
HASHLIB_RELEASE_LOCK(self);
200+
Py_END_ALLOW_THREADS
207201
PyBuffer_Release(&buf);
208202
Py_RETURN_NONE;
209203
}

Modules/sha1module.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -196,13 +196,11 @@ SHA1Type_update_impl(SHA1object *self, PyObject *obj)
196196
{
197197
Py_buffer buf;
198198
GET_BUFFER_VIEW_OR_ERROUT(obj, &buf);
199-
if (buf.len > 0) {
200-
Py_BEGIN_ALLOW_THREADS
201-
HASHLIB_ACQUIRE_LOCK(self);
202-
_hacl_sha1_state_update(self->hash_state, buf.buf, buf.len);
203-
HASHLIB_RELEASE_LOCK(self);
204-
Py_END_ALLOW_THREADS
205-
}
199+
Py_BEGIN_ALLOW_THREADS
200+
HASHLIB_ACQUIRE_LOCK(self);
201+
_hacl_sha1_state_update(self->hash_state, buf.buf, buf.len);
202+
HASHLIB_RELEASE_LOCK(self);
203+
Py_END_ALLOW_THREADS
206204
PyBuffer_Release(&buf);
207205
Py_RETURN_NONE;
208206
}

Modules/sha2module.c

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -406,13 +406,11 @@ SHA256Type_update_impl(SHA256object *self, PyObject *obj)
406406
{
407407
Py_buffer buf;
408408
GET_BUFFER_VIEW_OR_ERROUT(obj, &buf);
409-
if (buf.len > 0) {
410-
Py_BEGIN_ALLOW_THREADS
411-
HASHLIB_ACQUIRE_LOCK(self);
412-
_hacl_sha2_state_update_256(self->state, buf.buf, buf.len);
413-
HASHLIB_RELEASE_LOCK(self);
414-
Py_END_ALLOW_THREADS
415-
}
409+
Py_BEGIN_ALLOW_THREADS
410+
HASHLIB_ACQUIRE_LOCK(self);
411+
_hacl_sha2_state_update_256(self->state, buf.buf, buf.len);
412+
HASHLIB_RELEASE_LOCK(self);
413+
Py_END_ALLOW_THREADS
416414
PyBuffer_Release(&buf);
417415
Py_RETURN_NONE;
418416
}
@@ -432,13 +430,11 @@ SHA512Type_update_impl(SHA512object *self, PyObject *obj)
432430
{
433431
Py_buffer buf;
434432
GET_BUFFER_VIEW_OR_ERROUT(obj, &buf);
435-
if (buf.len > 0) {
436-
Py_BEGIN_ALLOW_THREADS
437-
HASHLIB_ACQUIRE_LOCK(self);
438-
_hacl_sha2_state_update_512(self->state, buf.buf, buf.len);
439-
HASHLIB_RELEASE_LOCK(self);
440-
Py_END_ALLOW_THREADS
441-
}
433+
Py_BEGIN_ALLOW_THREADS
434+
HASHLIB_ACQUIRE_LOCK(self);
435+
_hacl_sha2_state_update_512(self->state, buf.buf, buf.len);
436+
HASHLIB_RELEASE_LOCK(self);
437+
Py_END_ALLOW_THREADS
442438
PyBuffer_Release(&buf);
443439
Py_RETURN_NONE;
444440
}
@@ -793,11 +789,9 @@ _sha2_sha384_impl(PyObject *module, PyObject *data, int usedforsecurity,
793789
if (string) {
794790
/* Do not use self->mutex here as this is the constructor
795791
* where it is not yet possible to have concurrent access. */
796-
if (buf.len > 0) {
797-
Py_BEGIN_ALLOW_THREADS
798-
_hacl_sha2_state_update_512(new->state, buf.buf, buf.len);
799-
Py_END_ALLOW_THREADS
800-
}
792+
Py_BEGIN_ALLOW_THREADS
793+
_hacl_sha2_state_update_512(new->state, buf.buf, buf.len);
794+
Py_END_ALLOW_THREADS
801795
PyBuffer_Release(&buf);
802796
}
803797

Modules/sha3module.c

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,9 @@ py_sha3_new_impl(PyTypeObject *type, PyObject *data_obj, int usedforsecurity,
162162
GET_BUFFER_VIEW_OR_ERROR(data, &buf, goto error);
163163
/* Do not use self->mutex here as this is the constructor
164164
* where it is not yet possible to have concurrent access. */
165-
if (buf.len > 0) {
166-
Py_BEGIN_ALLOW_THREADS
167-
sha3_update(self->hash_state, buf.buf, buf.len);
168-
Py_END_ALLOW_THREADS
169-
}
165+
Py_BEGIN_ALLOW_THREADS
166+
sha3_update(self->hash_state, buf.buf, buf.len);
167+
Py_END_ALLOW_THREADS
170168
}
171169

172170
PyBuffer_Release(&buf);
@@ -298,13 +296,11 @@ _sha3_sha3_224_update_impl(SHA3object *self, PyObject *data)
298296
{
299297
Py_buffer buf;
300298
GET_BUFFER_VIEW_OR_ERROUT(data, &buf);
301-
if (buf.len > 0) {
302-
Py_BEGIN_ALLOW_THREADS
303-
HASHLIB_ACQUIRE_LOCK(self);
304-
sha3_update(self->hash_state, buf.buf, buf.len);
305-
HASHLIB_RELEASE_LOCK(self);
306-
Py_END_ALLOW_THREADS
307-
}
299+
Py_BEGIN_ALLOW_THREADS
300+
HASHLIB_ACQUIRE_LOCK(self);
301+
sha3_update(self->hash_state, buf.buf, buf.len);
302+
HASHLIB_RELEASE_LOCK(self);
303+
Py_END_ALLOW_THREADS
308304
PyBuffer_Release(&buf);
309305
Py_RETURN_NONE;
310306
}

0 commit comments

Comments
 (0)
0