pilha de chamadas estranha, poderia ser problema no uso do OpenSSL do asio?
-
02-07-2019 - |
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":
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.
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);
}