]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
QUIC APL: Fix logic of SSL_get_stream_type
authorHugo Landau <hlandau@openssl.org>
Wed, 26 Apr 2023 14:57:18 +0000 (15:57 +0100)
committerHugo Landau <hlandau@openssl.org>
Fri, 12 May 2023 13:47:14 +0000 (14:47 +0100)
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/20765)

ssl/quic/quic_impl.c

index 581117d537d801aa0851a4c4fe2e43675d21cdf5..d7ef8963f63ad99c07f6ad65b47c1e12d73b06eb 100644 (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))