ffcf191df382fe7113a078961ee4df83b98806fc
chinhli
  Wed Dec 4 14:25:28 2013 -0800
Use cloneStringZ(hmacStr, sizeof(hmacStr)) to null terminate the hmacStr character array safely.
diff --git src/lib/hmac.c src/lib/hmac.c
index 6680fd7..72ca645 100644
--- src/lib/hmac.c
+++ src/lib/hmac.c
@@ -3,48 +3,48 @@
 // EVP_sha512, etc
 // Be careful of the length of string with the choosen hash engine.
 // SHA1 needed 20 characters, MD5 needed 16 characters.
 // Change the length accordingly with your choosen hash engine
 
 #ifdef USE_SSL 
 #include "openssl/hmac.h"
 #include "openssl/evp.h"
 #include "common.h"
 
 char *hmacSha1(char *key, char *data)
 /* Calculate a openssl SHA1 keyed-hash message authentication code (HMAC) */
 {
 unsigned char* digest;
 digest=HMAC(EVP_sha1(), key, strlen(key), (unsigned char*)data, strlen(data), NULL, NULL);
-char hmacStr[41]="";
+char hmacStr[40];
 int i;
 for(i = 0; i < 20; i++)
     sprintf(&hmacStr[i*2], "%02x", (unsigned int)digest[i]);
-return cloneString(hmacStr);
+return cloneStringZ(hmacStr, sizeof(hmacStr));
 }
 
 char *hmacMd5(char *key, char *data)
 /* Calculate a openssl MD5 keyed-hash message authentication code (HMAC) */
 {
 unsigned char* digest;
 digest=HMAC(EVP_md5(), key, strlen(key), (unsigned char*)data, strlen(data), NULL, NULL);
 //printf("Raw mdr digest: %s\n", digest);
-char hmacStr[33]="";
+char hmacStr[32];
 int i;
 for(i = 0; i < 16; i++)
     sprintf(&hmacStr[i*2], "%02x", (unsigned int)digest[i]);
-return cloneString(hmacStr);
+return cloneStringZ(hmacStr, sizeof(hmacStr));
 }
 
 #else // --------- no USE_SSL ==> errAbort with message that openssl is required --------------
 
 #include "common.h"
 #include "errabort.h"
 #define NEED_OPENSSL "kent/src must be recompiled with openssl libs and USE_SSL=1 in order for this to work."
 
 char *hmacSha1(char *key, char *data)
 /* This is just a warning that appears in the absence of USE_SSL. Real
  * implementation is above! */
 {
 errAbort(NEED_OPENSSL);
 }