crypto/pkcs7/pk7_doit.c:591: error: UNINITIALIZED_VALUE
  The value read from ctx_tmp.digest was never initialized.
Showing all 1 steps of the trace


crypto/pkcs7/pk7_doit.c:591:5: 
589.   
590.   				/* Add digest */
591. > 				md_tmp=EVP_MD_CTX_md(&ctx_tmp);
592.   				EVP_DigestFinal(&ctx_tmp,md_data,&md_len);
593.   				digest=M_ASN1_OCTET_STRING_new();

int PKCS7_dataFinal(PKCS7 *p7, BIO *bio)
	{
	int ret=0;
	int i,j;
	BIO *btmp;
	BUF_MEM *buf_mem=NULL;
	BUF_MEM *buf=NULL;
	PKCS7_SIGNER_INFO *si;
	EVP_MD_CTX *mdc,ctx_tmp;
	STACK_OF(X509_ATTRIBUTE) *sk;
	STACK_OF(PKCS7_SIGNER_INFO) *si_sk=NULL;
	unsigned char *p,*pp=NULL;
	int x;
	ASN1_OCTET_STRING *os=NULL;
	i=OBJ_obj2nid(p7->type);
	p7->state=PKCS7_S_HEADER;
	switch (i)
		{
	case NID_pkcs7_signedAndEnveloped:
		si_sk=p7->d.signed_and_enveloped->signer_info;
		os=M_ASN1_OCTET_STRING_new();
		p7->d.signed_and_enveloped->enc_data->enc_data=os;
		break;
	case NID_pkcs7_enveloped:
		os=M_ASN1_OCTET_STRING_new();
		p7->d.enveloped->enc_data->enc_data=os;
		break;
	case NID_pkcs7_signed:
		si_sk=p7->d.sign->signer_info;
		os=p7->d.sign->contents->d.data;
		if(p7->detached) {
			M_ASN1_OCTET_STRING_free(os);
			p7->d.sign->contents->d.data = NULL;
		}
		break;
		}
	if (si_sk != NULL)
		{
		if ((buf=BUF_MEM_new()) == NULL)
			{
			PKCS7err(PKCS7_F_PKCS7_DATASIGN,ERR_R_BIO_LIB);
			goto err;
			}
		for (i=0; i<sk_PKCS7_SIGNER_INFO_num(si_sk); i++)
			{
			si=sk_PKCS7_SIGNER_INFO_value(si_sk,i);
			if (si->pkey == NULL) continue;
			j=OBJ_obj2nid(si->digest_alg->algorithm);
			btmp=bio;
			for (;;)
				{
				if ((btmp=BIO_find_type(btmp,BIO_TYPE_MD))
					== NULL)
					{
					PKCS7err(PKCS7_F_PKCS7_DATASIGN,PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST);
					goto err;
					}
				BIO_get_md_ctx(btmp,&mdc);
				if (mdc == NULL)
					{
					PKCS7err(PKCS7_F_PKCS7_DATASIGN,PKCS7_R_INTERNAL_ERROR);
					goto err;
					}
				if (EVP_MD_CTX_type(mdc) == j)
					break;
				else
					btmp=btmp->next_bio;
				}
			memcpy(&ctx_tmp,mdc,sizeof(ctx_tmp));
			if (!BUF_MEM_grow(buf,EVP_PKEY_size(si->pkey)))
				{
				PKCS7err(PKCS7_F_PKCS7_DATASIGN,ERR_R_BIO_LIB);
				goto err;
				}
			sk=si->auth_attr;
			if ((sk != NULL) && (sk_X509_ATTRIBUTE_num(sk) != 0))
				{
				unsigned char md_data[EVP_MAX_MD_SIZE];
				unsigned int md_len;
				ASN1_OCTET_STRING *digest;
				ASN1_UTCTIME *sign_time;
				const EVP_MD *md_tmp;
				sign_time=X509_gmtime_adj(NULL,0);
				PKCS7_add_signed_attribute(si,
					NID_pkcs9_signingTime,
					V_ASN1_UTCTIME,sign_time);
				md_tmp=EVP_MD_CTX_md(&ctx_tmp);
				EVP_DigestFinal(&ctx_tmp,md_data,&md_len);
				digest=M_ASN1_OCTET_STRING_new();
				M_ASN1_OCTET_STRING_set(digest,md_data,md_len);
				PKCS7_add_signed_attribute(si,
					NID_pkcs9_messageDigest,
					V_ASN1_OCTET_STRING,digest);
				EVP_SignInit(&ctx_tmp,md_tmp);
				x=i2d_ASN1_SET_OF_X509_ATTRIBUTE(sk,NULL,
					   i2d_X509_ATTRIBUTE,
					   V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET);
				pp=(unsigned char *)Malloc(x);
				p=pp;
				i2d_ASN1_SET_OF_X509_ATTRIBUTE(sk,&p,
				           i2d_X509_ATTRIBUTE,
					   V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET);
				EVP_SignUpdate(&ctx_tmp,pp,x);
				Free(pp);
				pp=NULL;
				}
			if (si->pkey->type == EVP_PKEY_DSA)
				ctx_tmp.digest=EVP_dss1();
			if (!EVP_SignFinal(&ctx_tmp,(unsigned char *)buf->data,
				(unsigned int *)&buf->length,si->pkey))
				{
				PKCS7err(PKCS7_F_PKCS7_DATASIGN,ERR_R_EVP_LIB);
				goto err;
				}
			if (!ASN1_STRING_set(si->enc_digest,
				(unsigned char *)buf->data,buf->length))
				{
				PKCS7err(PKCS7_F_PKCS7_DATASIGN,ERR_R_ASN1_LIB);
				goto err;
				}
			}
		}
	if (!p7->detached)
		{
		btmp=BIO_find_type(bio,BIO_TYPE_MEM);
		if (btmp == NULL)
			{
			PKCS7err(PKCS7_F_PKCS7_DATASIGN,PKCS7_R_UNABLE_TO_FIND_MEM_BIO);
			goto err;
			}
		BIO_get_mem_ptr(btmp,&buf_mem);
		BIO_set_flags(btmp, BIO_FLAGS_MEM_RDONLY);
		BIO_set_mem_eof_return(btmp, 0);
		os->data = (unsigned char *)buf_mem->data;
		os->length = buf_mem->length;
#if 0
		M_ASN1_OCTET_STRING_set(os,
			(unsigned char *)buf_mem->data,buf_mem->length);
#endif
		}
	if (pp != NULL) Free(pp);
	pp=NULL;
	ret=1;
err:
	if (buf != NULL) BUF_MEM_free(buf);
	return(ret);
	}
['int PKCS7_dataFinal(PKCS7 *p7, BIO *bio)\n\t{\n\tint ret=0;\n\tint i,j;\n\tBIO *btmp;\n\tBUF_MEM *buf_mem=NULL;\n\tBUF_MEM *buf=NULL;\n\tPKCS7_SIGNER_INFO *si;\n\tEVP_MD_CTX *mdc,ctx_tmp;\n\tSTACK_OF(X509_ATTRIBUTE) *sk;\n\tSTACK_OF(PKCS7_SIGNER_INFO) *si_sk=NULL;\n\tunsigned char *p,*pp=NULL;\n\tint x;\n\tASN1_OCTET_STRING *os=NULL;\n\ti=OBJ_obj2nid(p7->type);\n\tp7->state=PKCS7_S_HEADER;\n\tswitch (i)\n\t\t{\n\tcase NID_pkcs7_signedAndEnveloped:\n\t\tsi_sk=p7->d.signed_and_enveloped->signer_info;\n\t\tos=M_ASN1_OCTET_STRING_new();\n\t\tp7->d.signed_and_enveloped->enc_data->enc_data=os;\n\t\tbreak;\n\tcase NID_pkcs7_enveloped:\n\t\tos=M_ASN1_OCTET_STRING_new();\n\t\tp7->d.enveloped->enc_data->enc_data=os;\n\t\tbreak;\n\tcase NID_pkcs7_signed:\n\t\tsi_sk=p7->d.sign->signer_info;\n\t\tos=p7->d.sign->contents->d.data;\n\t\tif(p7->detached) {\n\t\t\tM_ASN1_OCTET_STRING_free(os);\n\t\t\tp7->d.sign->contents->d.data = NULL;\n\t\t}\n\t\tbreak;\n\t\t}\n\tif (si_sk != NULL)\n\t\t{\n\t\tif ((buf=BUF_MEM_new()) == NULL)\n\t\t\t{\n\t\t\tPKCS7err(PKCS7_F_PKCS7_DATASIGN,ERR_R_BIO_LIB);\n\t\t\tgoto err;\n\t\t\t}\n\t\tfor (i=0; i<sk_PKCS7_SIGNER_INFO_num(si_sk); i++)\n\t\t\t{\n\t\t\tsi=sk_PKCS7_SIGNER_INFO_value(si_sk,i);\n\t\t\tif (si->pkey == NULL) continue;\n\t\t\tj=OBJ_obj2nid(si->digest_alg->algorithm);\n\t\t\tbtmp=bio;\n\t\t\tfor (;;)\n\t\t\t\t{\n\t\t\t\tif ((btmp=BIO_find_type(btmp,BIO_TYPE_MD))\n\t\t\t\t\t== NULL)\n\t\t\t\t\t{\n\t\t\t\t\tPKCS7err(PKCS7_F_PKCS7_DATASIGN,PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST);\n\t\t\t\t\tgoto err;\n\t\t\t\t\t}\n\t\t\t\tBIO_get_md_ctx(btmp,&mdc);\n\t\t\t\tif (mdc == NULL)\n\t\t\t\t\t{\n\t\t\t\t\tPKCS7err(PKCS7_F_PKCS7_DATASIGN,PKCS7_R_INTERNAL_ERROR);\n\t\t\t\t\tgoto err;\n\t\t\t\t\t}\n\t\t\t\tif (EVP_MD_CTX_type(mdc) == j)\n\t\t\t\t\tbreak;\n\t\t\t\telse\n\t\t\t\t\tbtmp=btmp->next_bio;\n\t\t\t\t}\n\t\t\tmemcpy(&ctx_tmp,mdc,sizeof(ctx_tmp));\n\t\t\tif (!BUF_MEM_grow(buf,EVP_PKEY_size(si->pkey)))\n\t\t\t\t{\n\t\t\t\tPKCS7err(PKCS7_F_PKCS7_DATASIGN,ERR_R_BIO_LIB);\n\t\t\t\tgoto err;\n\t\t\t\t}\n\t\t\tsk=si->auth_attr;\n\t\t\tif ((sk != NULL) && (sk_X509_ATTRIBUTE_num(sk) != 0))\n\t\t\t\t{\n\t\t\t\tunsigned char md_data[EVP_MAX_MD_SIZE];\n\t\t\t\tunsigned int md_len;\n\t\t\t\tASN1_OCTET_STRING *digest;\n\t\t\t\tASN1_UTCTIME *sign_time;\n\t\t\t\tconst EVP_MD *md_tmp;\n\t\t\t\tsign_time=X509_gmtime_adj(NULL,0);\n\t\t\t\tPKCS7_add_signed_attribute(si,\n\t\t\t\t\tNID_pkcs9_signingTime,\n\t\t\t\t\tV_ASN1_UTCTIME,sign_time);\n\t\t\t\tmd_tmp=EVP_MD_CTX_md(&ctx_tmp);\n\t\t\t\tEVP_DigestFinal(&ctx_tmp,md_data,&md_len);\n\t\t\t\tdigest=M_ASN1_OCTET_STRING_new();\n\t\t\t\tM_ASN1_OCTET_STRING_set(digest,md_data,md_len);\n\t\t\t\tPKCS7_add_signed_attribute(si,\n\t\t\t\t\tNID_pkcs9_messageDigest,\n\t\t\t\t\tV_ASN1_OCTET_STRING,digest);\n\t\t\t\tEVP_SignInit(&ctx_tmp,md_tmp);\n\t\t\t\tx=i2d_ASN1_SET_OF_X509_ATTRIBUTE(sk,NULL,\n\t\t\t\t\t   i2d_X509_ATTRIBUTE,\n\t\t\t\t\t   V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET);\n\t\t\t\tpp=(unsigned char *)Malloc(x);\n\t\t\t\tp=pp;\n\t\t\t\ti2d_ASN1_SET_OF_X509_ATTRIBUTE(sk,&p,\n\t\t\t\t           i2d_X509_ATTRIBUTE,\n\t\t\t\t\t   V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET);\n\t\t\t\tEVP_SignUpdate(&ctx_tmp,pp,x);\n\t\t\t\tFree(pp);\n\t\t\t\tpp=NULL;\n\t\t\t\t}\n\t\t\tif (si->pkey->type == EVP_PKEY_DSA)\n\t\t\t\tctx_tmp.digest=EVP_dss1();\n\t\t\tif (!EVP_SignFinal(&ctx_tmp,(unsigned char *)buf->data,\n\t\t\t\t(unsigned int *)&buf->length,si->pkey))\n\t\t\t\t{\n\t\t\t\tPKCS7err(PKCS7_F_PKCS7_DATASIGN,ERR_R_EVP_LIB);\n\t\t\t\tgoto err;\n\t\t\t\t}\n\t\t\tif (!ASN1_STRING_set(si->enc_digest,\n\t\t\t\t(unsigned char *)buf->data,buf->length))\n\t\t\t\t{\n\t\t\t\tPKCS7err(PKCS7_F_PKCS7_DATASIGN,ERR_R_ASN1_LIB);\n\t\t\t\tgoto err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tif (!p7->detached)\n\t\t{\n\t\tbtmp=BIO_find_type(bio,BIO_TYPE_MEM);\n\t\tif (btmp == NULL)\n\t\t\t{\n\t\t\tPKCS7err(PKCS7_F_PKCS7_DATASIGN,PKCS7_R_UNABLE_TO_FIND_MEM_BIO);\n\t\t\tgoto err;\n\t\t\t}\n\t\tBIO_get_mem_ptr(btmp,&buf_mem);\n\t\tBIO_set_flags(btmp, BIO_FLAGS_MEM_RDONLY);\n\t\tBIO_set_mem_eof_return(btmp, 0);\n\t\tos->data = (unsigned char *)buf_mem->data;\n\t\tos->length = buf_mem->length;\n#if 0\n\t\tM_ASN1_OCTET_STRING_set(os,\n\t\t\t(unsigned char *)buf_mem->data,buf_mem->length);\n#endif\n\t\t}\n\tif (pp != NULL) Free(pp);\n\tpp=NULL;\n\tret=1;\nerr:\n\tif (buf != NULL) BUF_MEM_free(buf);\n\treturn(ret);\n\t}']