Frage

Ich habe diesen seltsamen Call-Stack und ich bin zu verstehen, warum stapfe.

Es scheint mir, dass Asio ruft offen ssl die lesen und bekommt dann einen negativen Rückgabewert (-37).

Asio scheint dann zu versuchen, es in der Memcpy Funktion zu verwenden.

Die Funktion, die diesen Aufruf Stapel verursacht wird hunderds tausende Male ohne diesen Fehler verwendet.

Es geschieht nur selten, etwa einmal pro Woche.

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

Beachten Sie, dass Größe des Request-Header ist genau 3 Bytes immer.

Kann jemand etwas Licht auf mögliche Ursachen Schuppen?

Hinweis: Ich verwende Boost Asio 1,36

Hier ist der Krachen Call-Stack Crash in Memcpy wegen des riesigen "count" geschieht:

War es hilfreich?

Lösung

Ein kurzer Blick auf evp_lib.c zeigt, dass es eine Länge von der Chiffre Kontext zu ziehen versucht, und in Ihrem Fall bekommt einen sehr schlechten Wert (tm). Es verwendet dann diesen Wert um eine Zeichenfolge zu kopieren (was die Memcpy tut). Meine Vermutung ist Ihre Chiffre etwas Wegwerfen, sei es ein Thread Sicherheitsproblem oder eine mehr Bytes in einen Puffer zu lesen als erlaubt.

Relevante Quelle :

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top