Ошибка СЕГМЕНТАЦИИ при использовании библиотеки boringssl - PullRequest
0 голосов
/ 06 декабря 2018

Когда я запускаю следующий фрагмент кода на моем терминале, это дает ошибку сегментации.Я использую библиотеку boringssl.

#include <bits/stdc++.h>
#include <openssl/evp.h>
using namespace std;

// #include <openssl/digest.h>
int main(){
    EVP_MD_CTX* ctx = EVP_MD_CTX_new();
    EVP_MD_CTX_init(ctx);

    const EVP_MD* sha256 = EVP_sha256();
    EVP_DigestInit(ctx,sha256);

    char str[]="ANIKET GUPTA";
    EVP_DigestUpdate(ctx,str,strlen(str));

    unsigned char hash[EVP_MAX_MD_SIZE];
    unsigned int* hash_size;
    EVP_DigestFinal(ctx,hash,hash_size);

    cout <<"SUCCESS";
    EVP_MD_CTX_free(ctx);
}

Я запускаю этот код с помощью следующей команды: g++ -I~/src/boringssl/include sign.cpp ~/src/boringssl/build/crypto/libcrypto.a -lpthread В чем заключается ошибка, приводящая к ошибке сегментации?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

РЕШИТЬ!Мы должны malloc hash и hash_size

0 голосов
/ 06 декабря 2018

В строках

unsigned int* hash_size;
EVP_DigestFinal(ctx, hash, hash_size);

вы используете hash_size, пока он не инициализирован, и EVP_DigestFinal() попытается записать результат hash_size в неизвестное место, что вызовет ошибку сегмента.Вместо этого вы можете сделать

unsigned int hash_size;
EVP_DigestFinal(ctx, hash, &hash_size);

Ваш компилятор должен был дать вам указание на эту проблему, он обычно способен обнаруживать неинициализированные переменные, подобные этой.

...