QUIC APL: Fix logic of SSL_get_stream_type

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/20765)
This commit is contained in:
Hugo Landau 2023-04-26 15:57:18 +01:00
parent 22b1a96ff7
commit 59c5c016e5

View File

@ -2009,18 +2009,21 @@ int ossl_quic_get_stream_type(SSL *s)
QCTX ctx;
if (!expect_quic(s, &ctx))
return SSL_STREAM_TYPE_NONE;
return SSL_STREAM_TYPE_BIDI;
if (ctx.xso == NULL) {
/*
* If we are deferring XSO creation, assume single stream mode and
* default to BIDI, as the deferred XSO which will be created will be
* bidirectional.
* If deferred XSO creation has yet to occur, proceed according to the
* default stream mode. If AUTO_BIDI or AUTO_UNI is set, we cannot know
* what kind of stream will be created yet, so return BIDI on the basis
* that at this time, the client still has the option of calling
* SSL_read() or SSL_write() first.
*/
if (!ctx.qc->default_xso_created)
return SSL_STREAM_TYPE_BIDI;
else
if (ctx.qc->default_xso_created
|| ctx.qc->default_stream_mode == SSL_DEFAULT_STREAM_MODE_NONE)
return SSL_STREAM_TYPE_NONE;
else
return SSL_STREAM_TYPE_BIDI;
}
if (ossl_quic_stream_is_bidi(ctx.xso->stream))