2008-09-21 3 views
1

У меня есть этот странный стек вызовов, и я в тупике, чтобы понять, почему.Странный стек вызовов, может ли это быть проблемой при использовании asio в opensl?

Мне кажется, что asio вызывает открытый ssl, а затем получает отрицательное возвращаемое значение (-37).

Asio, похоже, пытается использовать его внутри функции memcpy.

Функция, вызывающая этот стек вызовов, используется в тысячах раз подряд без этой ошибки.

Это происходит редко, примерно раз в неделю.

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

Обратите внимание, что размер заголовка запроса составляет ровно 3 байта.

Может ли кто-нибудь пролить свет на возможные причины?

Примечание: Я использую повышение ASIO 1,36

Вот аварии стек Грохот вызов происходит в тетсру из-за огромного «кол»:

+0

Р. Бонди @ Брайан: Это BIO_read возвращение -37? – user7116 2008-09-21 17:07:58

+0

Я не уверен в этом, но 4294967259 в качестве подписанного числа будет -37 – 2008-09-21 17:10:16

ответ

2

Быстрый взгляд на evp_lib.c показывает, что он пытается вытягивать длину из контекста шифрования, а в вашем случае получает очень плохое значение (tm). Затем он использует это значение для копирования строки (что делает memcpy). Моя догадка заключается в том, что что-то разрушает ваш шифр, будь то проблема безопасности потоков или чтение большего количества байтов в буфер, чем разрешено.

Relevant source:

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); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^