From bb87b97a8252d73437356eb2f5f6dc0c9f514caa Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Fri, 10 Apr 2015 15:19:25 +0100 Subject: [PATCH] catacomb.c: Handle Python's randomize hashing parameters properly. Organization: Straylight/Edgeware From: Mark Wooding --- catacomb.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/catacomb.c b/catacomb.c index 3aebea3..015c5a7 100644 --- a/catacomb.c +++ b/catacomb.c @@ -144,11 +144,27 @@ static PyMethodDef methods[] = { { 0 } }; +static void init_random(void) +{ +#if PY_MAJOR_VERSION >= 3 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 6) + char *seed; + uint32 r; + + if (!Py_HashRandomizationFlag) return; + seed = getenv("PYTHONHASHSEED"); + if (!seed || strcmp(seed, "random") == 0) r = GR_WORD(&rand_global); + else r = strtoul(seed, 0, 0); + if (!r) r = 0xe011f220; /* zero doesn't work well */ + unihash_setkey(&unihash_global, r); +#endif +} + void init_base(void) { PyObject *mod; addmethods(methods); INIT_MODULES; + init_random(); mod = Py_InitModule("catacomb._base", donemethods()); INSERT_MODULES; INSERT("smallprimes", smallprimes()); -- [mdw]