The current alpn() method used to retrieve the negotiated ALPN protocol does not retun a well-formed string but causes a memory corruption, since the SSL_get0_alpn_selected function expects a NULL pointer. From man SSL_get0_alpn_selected:
SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, unsigned int *len);
SSL_get0_alpn_selected() returns a pointer to the selected protocol in data with length len. It is
not NUL-terminated. data is set to NULL and len is set to 0 if no protocol has been selected.
data must not be freed.
This bug can be reproduced by initalizing an OpenSSLStream and call its alpn() method after a TLS handshake has been completed and alpnCallback has been invoked.
The proposed solution is to use a const(ubyte)* pointer which is initialized to null and returned through a cast(string).
The text was updated successfully, but these errors were encountered:
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.