]> source.dussan.org Git - tigervnc.git/commitdiff
Handle pending data in TLS buffers
authorPierre Ossman <ossman@cendio.se>
Mon, 9 Dec 2019 15:57:04 +0000 (16:57 +0100)
committerPierre Ossman <ossman@cendio.se>
Mon, 9 Dec 2019 15:57:04 +0000 (16:57 +0100)
There might be more bytes left in the current TLS record, even if
there is nothing on the underlying stream. Make sure we properly
return this when we aren't being requested to block.

common/rdr/TLSInStream.cxx

index 77b16729b7404de79571cd3b98f1aaecc5fda74a..8cd07b6c7c21b09638116e605acaf371023bd8ad 100644 (file)
@@ -109,9 +109,11 @@ int TLSInStream::readTLS(U8* buf, int len, bool wait)
 {
   int n;
 
-  n = in->check(1, 1, wait);
-  if (n == 0)
-    return 0;
+  if (gnutls_record_check_pending(session) == 0) {
+    n = in->check(1, 1, wait);
+    if (n == 0)
+      return 0;
+  }
 
   n = gnutls_record_recv(session, (void *) buf, len);
   if (n == GNUTLS_E_INTERRUPTED || n == GNUTLS_E_AGAIN)