首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复openssl的malloc错误?

问如何修复openssl的malloc错误?
EN

Stack Overflow用户
提问于 2018-10-17 05:48:39
回答 1查看 2.9K关注 0票数 0

我正在使用openssl加密文件,并得到malloc错误,如下所示。

代码语言:javascript
复制
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)。

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2018-10-17 06:13:16

如何修复openssl的malloc错误?

如果我正确地解析了一些东西,那么CMS_add1_cert看起来就失败了。它可能不是内存错误(也可能是由于一个解析错误导致了一个非常大的参数)。

OpenSSL 1.0.2.j为提交e216bf9d7ca7。下面是cms.c,cms_smime.c:461上的函数如下所示。

第461行是代码:

代码语言:javascript
复制
merr:
    CMSerr(CMS_F_CMS_SIGN, ERR_R_MALLOC_FAILURE);

我猜这是因为:

代码语言:javascript
复制
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,它提供了返回错误的函数。

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52848028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档