From fab093c637cb0d8837802869321cd0abed7f156c Mon Sep 17 00:00:00 2001 From: Adam Tkac Date: Wed, 25 Aug 2010 13:52:49 +0000 Subject: [PATCH] [Bugfix] Properly report transport errors to GNUTLS. Signed-off-by: Martin Koegler git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4125 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- common/rdr/TLSInStream.cxx | 20 +++++++++++++------- common/rdr/TLSOutStream.cxx | 12 ++++++++++-- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/common/rdr/TLSInStream.cxx b/common/rdr/TLSInStream.cxx index f6bf334c..faf548c8 100644 --- a/common/rdr/TLSInStream.cxx +++ b/common/rdr/TLSInStream.cxx @@ -37,16 +37,22 @@ ssize_t rdr::gnutls_InStream_pull(gnutls_transport_ptr str, void* data, { InStream* in= (InStream*) str; - if (!in->check(1, 1, false)) { - errno=EAGAIN; + try { + if (!in->check(1, 1, false)) { + gnutls_transport_set_global_errno(EAGAIN); + return -1; + } + + if (in->getend() - in->getptr() < size) + size = in->getend() - in->getptr(); + + in->readBytes(data, size); + + } catch (Exception& e) { + gnutls_transport_set_global_errno(EINVAL); return -1; } - if (in->getend() - in->getptr() < size) - size = in->getend() - in->getptr(); - - in->readBytes(data, size); - return size; } diff --git a/common/rdr/TLSOutStream.cxx b/common/rdr/TLSOutStream.cxx index 59edf150..888b455b 100644 --- a/common/rdr/TLSOutStream.cxx +++ b/common/rdr/TLSOutStream.cxx @@ -25,6 +25,7 @@ #include #include #include +#include #ifdef HAVE_GNUTLS using namespace rdr; @@ -35,8 +36,15 @@ ssize_t rdr::gnutls_OutStream_push(gnutls_transport_ptr str, const void* data, size_t size) { OutStream* out = (OutStream*) str; - out->writeBytes(data, size); - out->flush(); + + try { + out->writeBytes(data, size); + out->flush(); + } catch (Exception& e) { + gnutls_transport_set_global_errno(EINVAL); + return -1; + } + return size; } -- 2.39.5