Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Make fallback MD5 implementation thread-safe on big-endian systems
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 7 Aug 2024 07:43:52 +0000 (10:43 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 7 Aug 2024 07:44:10 +0000 (10:44 +0300)
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

src/common/md5.c

index 4dec37705e2b0efd32016f3b276c679e92948c5b..078baccbdc3becf2f3bb5e4e6104391e0b4d8251 100644 (file)
@@ -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];