我正在使用openssl加密文件,并得到malloc错误,如下所示。
openssl version
OpenSSL 1.0.2j-fips 26 Sep 2016
openssl command
openssl cms -sign -in infile -signer file.crt.pem -inkey file.key.pem -CAfile CAfile -out outfile -keyopt rsa_padding_mode:pss -certfile by_hash/81908841
Errors
1435735688:error:2E0A40AF:CMS routines:CMS_add0_cert:certificate already present:cms_lib.c:462:
1435735688:error:2E094041:CMS routines:CMS_sign:malloc failure:cms_smime.c:461:请注意,我100%确信我所提供的参数是100%正确的(即: infile、outfile、certfile、keyfile、cafile和hash_file)。
提前感谢
发布于 2018-10-17 06:13:16
如何修复openssl的malloc错误?
如果我正确地解析了一些东西,那么CMS_add1_cert看起来就失败了。它可能不是内存错误(也可能是由于一个解析错误导致了一个非常大的参数)。
OpenSSL 1.0.2.j为提交e216bf9d7ca7。下面是cms.c,cms_smime.c:461上的函数如下所示。
第461行是代码:
merr:
CMSerr(CMS_F_CMS_SIGN, ERR_R_MALLOC_FAILURE);我猜这是因为:
for (i = 0; i < sk_X509_num(certs); i++) {
X509 *x = sk_X509_value(certs, i);
if (!CMS_add1_cert(cms, x))
goto merr;
}我们不能说得更多,因为没有足够的信息,比如证书和其他参数。下一步是安装符号,然后在调试器下执行代码。
下面是CMS_sign,它提供了返回错误的函数。
CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey,
STACK_OF(X509) *certs, BIO *data,
unsigned int flags)
{
CMS_ContentInfo *cms;
int i;
cms = CMS_ContentInfo_new();
if (!cms || !CMS_SignedData_init(cms))
goto merr;
if (pkey && !CMS_add1_signer(cms, signcert, pkey, NULL, flags)) {
CMSerr(CMS_F_CMS_SIGN, CMS_R_ADD_SIGNER_ERROR);
goto err;
}
for (i = 0; i < sk_X509_num(certs); i++) {
X509 *x = sk_X509_value(certs, i);
if (!CMS_add1_cert(cms, x))
goto merr;
}
if (!(flags & CMS_DETACHED))
CMS_set_detached(cms, 0);
if ((flags & (CMS_STREAM | CMS_PARTIAL))
|| CMS_final(cms, data, NULL, flags))
return cms;
else
goto err;
merr:
CMSerr(CMS_F_CMS_SIGN, ERR_R_MALLOC_FAILURE);
err:
if (cms)
CMS_ContentInfo_free(cms);
return NULL;
}https://stackoverflow.com/questions/52848028
复制相似问题