From f9117960469682b2ef7f9bb96940a50ba1740060 Mon Sep 17 00:00:00 2001 From: Jean-Marie Verdun Date: Wed, 16 Oct 2019 19:18:37 +0200 Subject: [PATCH] Fix auth base64 computation when HMAC return string contains \0 character --- src/Mod/Cloud/App/AppCloud.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Mod/Cloud/App/AppCloud.cpp b/src/Mod/Cloud/App/AppCloud.cpp index 48cd7f06d9bb..254b53c73579 100644 --- a/src/Mod/Cloud/App/AppCloud.cpp +++ b/src/Mod/Cloud/App/AppCloud.cpp @@ -255,6 +255,7 @@ struct Cloud::AmzData *Cloud::ComputeDigestAmzS3v2(char *operation, char *data_t char date_formatted[256]; char StringToSign[1024]; unsigned char *digest; + unsigned int HMACLength; // Amazon S3 and Swift require the timezone to be define to GMT. // As to simplify the conversion this is performed through the TZ // environment variable and a call to localtime as to convert output of gettimeofday @@ -292,8 +293,8 @@ struct Cloud::AmzData *Cloud::ComputeDigestAmzS3v2(char *operation, char *data_t sprintf(StringToSign,"%s\n\n%s\n%s\n%s", operation, data_type, date_formatted, target); // We have to use HMAC encoding and SHA1 digest=HMAC(EVP_sha1(),Secret,strlen(Secret), - (const unsigned char *)&StringToSign,strlen(StringToSign),NULL,NULL); - returnData->digest = Base::base64_encode(digest,strlen((const char *)digest)); + (const unsigned char *)&StringToSign,strlen(StringToSign),NULL,&HMACLength); + returnData->digest = Base::base64_encode(digest,HMACLength); strcpy(returnData->dateFormatted,date_formatted); return returnData;