From: Heikki Linnakangas Date: Wed, 7 Aug 2024 07:43:52 +0000 (+0300) Subject: Make fallback MD5 implementation thread-safe on big-endian systems X-Git-Tag: REL_18_BETA1~2185 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=2676040df0b2ebbcf8af759dbe5d34f393c3d5b5;p=postgresql.git Make fallback MD5 implementation thread-safe on big-endian systems Replace a static scratch buffer with a local variable, because a static buffer makes the function not thread-safe. This function is used in client-code in libpq, so it needs to be thread-safe. It was until commit b67b57a966, which replaced the implementation with the one from pgcrypto. Backpatch to v14, where we switched to the new implementation. Reviewed-by: Robert Haas, Michael Paquier Discussion: https://www.postgresql.org/message-id/dfa2015d-ad21-4802-a4cc-3850fc5fff3f@iki.fi --- diff --git a/src/common/md5.c b/src/common/md5.c index f1d47722f8a..32b696a66df 100644 --- a/src/common/md5.c +++ b/src/common/md5.c @@ -150,10 +150,6 @@ static const uint8 md5_paddat[MD5_BUFLEN] = { 0, 0, 0, 0, 0, 0, 0, 0, }; -#ifdef WORDS_BIGENDIAN -static uint32 X[16]; -#endif - static void md5_calc(const uint8 *b64, pg_md5_ctx *ctx) { @@ -167,6 +163,7 @@ md5_calc(const uint8 *b64, pg_md5_ctx *ctx) #else /* 4 byte words */ /* what a brute force but fast! */ + uint32 X[16]; uint8 *y = (uint8 *) X; y[0] = b64[3];