summaryrefslogtreecommitdiffstats
path: root/Modules/_sha3
diff options
context:
space:
mode:
authorChristian Heimes <christian@python.org>2016-09-08 11:35:00 (GMT)
committerChristian Heimes <christian@python.org>2016-09-08 11:35:00 (GMT)
commitcf45ee10fba914bd28a379f0c64e4113d2dc46df (patch)
tree4c96f845aa3fcf2174c5f9ed6a3afe2c61f036e2 /Modules/_sha3
parent9dda0c9569dfc5fd7c717f97379416ba51d5656b (diff)
downloadcpython-cf45ee10fba914bd28a379f0c64e4113d2dc46df.zip
cpython-cf45ee10fba914bd28a379f0c64e4113d2dc46df.tar.gz
cpython-cf45ee10fba914bd28a379f0c64e4113d2dc46df.tar.bz2
Issue #16113: SHA3: allocate extra memory for lane extraction and check return value of PyModule_Create()
Diffstat (limited to 'Modules/_sha3')
-rw-r--r--Modules/_sha3/sha3module.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/Modules/_sha3/sha3module.c b/Modules/_sha3/sha3module.c
index c236387..8d7eff4 100644
--- a/Modules/_sha3/sha3module.c
+++ b/Modules/_sha3/sha3module.c
@@ -114,6 +114,7 @@
#endif
#define SHA3_MAX_DIGESTSIZE 64 /* 64 Bytes (512 Bits) for 224 to 512 */
+#define SHA3_LANESIZE 96 /* ExtractLane needs an extra 96 bytes */
#define SHA3_state Keccak_HashInstance
#define SHA3_init Keccak_HashInitialize
#define SHA3_process Keccak_HashUpdate
@@ -310,7 +311,7 @@ static PyObject *
_sha3_sha3_224_digest_impl(SHA3object *self)
/*[clinic end generated code: output=fd531842e20b2d5b input=a5807917d219b30e]*/
{
- unsigned char digest[SHA3_MAX_DIGESTSIZE];
+ unsigned char digest[SHA3_MAX_DIGESTSIZE + SHA3_LANESIZE];
SHA3_state temp;
HashReturn res;
@@ -337,7 +338,7 @@ static PyObject *
_sha3_sha3_224_hexdigest_impl(SHA3object *self)
/*[clinic end generated code: output=75ad03257906918d input=2d91bb6e0d114ee3]*/
{
- unsigned char digest[SHA3_MAX_DIGESTSIZE];
+ unsigned char digest[SHA3_MAX_DIGESTSIZE + SHA3_LANESIZE];
SHA3_state temp;
HashReturn res;
@@ -601,7 +602,12 @@ _SHAKE_digest(SHA3object *self, unsigned long digestlen, int hex)
int res;
PyObject *result = NULL;
- if ((digest = (unsigned char*)PyMem_Malloc(digestlen)) == NULL) {
+ /* ExtractLane needs at least SHA3_MAX_DIGESTSIZE + SHA3_LANESIZE and
+ * SHA3_LANESIZE extra space.
+ */
+ digest = (unsigned char*)PyMem_Malloc(SHA3_LANESIZE +
+ ((digestlen > SHA3_MAX_DIGESTSIZE) ? digestlen : SHA3_MAX_DIGESTSIZE));
+ if (digest == NULL) {
return PyErr_NoMemory();
}
@@ -708,7 +714,9 @@ PyInit__sha3(void)
{
PyObject *m = NULL;
- m = PyModule_Create(&_SHA3module);
+ if ((m = PyModule_Create(&_SHA3module)) == NULL) {
+ return NULL;
+ }
#define init_sha3type(name, type) \
do { \