Pergunta

Eu tenho essa pilha de chamadas estranho e eu estou perplexo entender o porquê.

Parece-me que a leitura chamadas asio do Open SSL e, em seguida, recebe um valor de retorno negativo (-37).

Asio parece, em seguida, tentar usá-lo dentro da função memcpy.

A função que faz com que essa pilha de chamadas é usado hunderds de milhares de vezes sem esse erro.

Isso só acontece raramente, uma vez por semana.

ulRead = (boost::asio::read(spCon->socket(), boost::asio::buffer(_requestHeader, _requestHeader.size()), boost::asio::transfer_at_least(_requestHeader.size()), error_));

Note que o tamanho do pedido do cabeçalho é exatamente 3 bytes sempre.

Poderia alguém lançar alguma luz sobre as possíveis razões?

Nota: eu estou usando o impulso asio 1,36

Aqui está o acidente pilha de chamadas bater acontece em memcpy por causa da enorme "contagem":

Foi útil?

Solução

Um rápido olhar para espectáculos evp_lib.c que tenta puxar um comprimento a partir do contexto cifra, e no seu caso fica um Very Bad Valor (tm). Em seguida, usa esse valor para copiar uma string (que faz o memcpy). Meu palpite é que algo está destruindo a sua cifra, seja ele um problema de segurança segmento, ou uma leitura mais bytes em um buffer do que o permitido.

relevante fonte :

int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type)
{
int i=0,j;

if (type != NULL)
    {
    j=EVP_CIPHER_CTX_iv_length(c);
    OPENSSL_assert(j <= sizeof c->iv);
    i=ASN1_TYPE_set_octetstring(type,c->oiv,j);
    }
return(i);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top