Fix stack clobber in new uuid-ossp code.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 28 May 2014 15:50:41 +0000 (11:50 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 28 May 2014 15:50:41 +0000 (11:50 -0400)
The V5 (SHA1 hashing) code wrote 20 bytes into a 16-byte local variable.
This had accidentally failed to fail in my testing and Matteo's, but
buildfarm results exposed the problem.

contrib/uuid-ossp/uuid-ossp.c

index f8c33d2b4698fb85fd9b05e8810638acd4f2d59f..88da168388916b19db5d980fd7c0d6b53b0cec6d 100644 (file)
@@ -316,16 +316,19 @@ uuid_generate_internal(int v, unsigned char *ns, char *ptr, int len)
                                        MD5Init(&ctx);
                                        MD5Update(&ctx, ns, sizeof(uu));
                                        MD5Update(&ctx, (unsigned char *) ptr, len);
+                                       /* we assume sizeof MD5 result is 16, same as UUID size */
                                        MD5Final((unsigned char *) &uu, &ctx);
                                }
                                else
                                {
                                        SHA1_CTX        ctx;
+                                       unsigned char sha1result[SHA1_RESULTLEN];
 
                                        SHA1Init(&ctx);
                                        SHA1Update(&ctx, ns, sizeof(uu));
                                        SHA1Update(&ctx, (unsigned char *) ptr, len);
-                                       SHA1Final((unsigned char *) &uu, &ctx);
+                                       SHA1Final(sha1result, &ctx);
+                                       memcpy(&uu, sha1result, sizeof(uu));
                                }
 
                                /* the calculated hash is using local order */