Bug#917467: wmbiff: tlscomm_expect() does not handle EAGAIN or GNUTLS_E_AGAIN

Nye Liu nyet at nyet.org
Thu Dec 27 20:48:02 GMT 2018


Package: wmbiff
Version: 0.4.31-1
Severity: important
Tags: upstream patch

If gnutls_read() or read() report EAGAIN, tlscomm_expect() fails:

wmbiff/nyet  comm: wrote a000 CAPABILITY
wmbiff/nyet  comm: imap.***.***:993: expecting: * CAPABILITY
wmbiff/nyet  comm: imap.***.***:993: gnutls error reading: Resource temporarily unavailable, try again.
wmbiff/nyet  imap4: unable to query capability stringwmbiff/nyet  comm: wrote a002 LOGOUT
wmbiff/nyet  comm: imap.***.***:993: closing.

-- System Information:
Debian Release: buster/sid
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'testing-debug'), (500, 'unstable'), (500, 'oldstable'), (1, 'experimental-debug')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.19.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages wmbiff depends on:
ii  libc6        2.28-2
ii  libgcrypt20  1.8.4-4
ii  libgnutls30  3.6.5-2
ii  libx11-6     2:1.6.7-1
ii  libxext6     2:1.3.3-1+b2
ii  libxpm4      1:3.5.12-1

wmbiff recommends no packages.

Versions of packages wmbiff suggests:
ii  ruby         1:2.5.1
pn  ssh-askpass  <none>

-- no debconf information
-------------- next part --------------
diff --git a/wmbiff/Imap4Client.c b/wmbiff/Imap4Client.c
index ba12a66..ea24dd9 100644
--- a/wmbiff/Imap4Client.c
+++ b/wmbiff/Imap4Client.c
@@ -258,7 +258,7 @@ FILE *imap_open(Pop3 pc)
 	   encrypted session. */
 	tlscomm_printf(scs, "a000 CAPABILITY\r\n");
 	if (tlscomm_expect(scs, "* CAPABILITY", capabilities, BUF_SIZE) == 0) {
-		IMAP_DM(pc, DEBUG_ERROR, "unable to query capability string");
+		IMAP_DM(pc, DEBUG_ERROR, "unable to query capability string\n");
 		goto communication_failure;
 	}
 
diff --git a/wmbiff/tlsComm.c b/wmbiff/tlsComm.c
index 85426a0..f37f3f5 100644
--- a/wmbiff/tlsComm.c
+++ b/wmbiff/tlsComm.c
@@ -229,10 +229,12 @@ tlscomm_expect(struct connection_state *scs,
 #ifdef USE_GNUTLS
 			if (scs->tls_state) {
 				/* BUF_SIZE - 1 leaves room for trailing \0 */
-				thisreadbytes =
-					gnutls_read(scs->tls_state,
-								&scs->unprocessed[buffered_bytes],
-								BUF_SIZE - 1 - buffered_bytes);
+				do {
+					thisreadbytes =
+						gnutls_read(scs->tls_state,
+									&scs->unprocessed[buffered_bytes],
+									BUF_SIZE - 1 - buffered_bytes);
+				} while (thisreadbytes == GNUTLS_E_AGAIN);
 				if (thisreadbytes < 0) {
 					handle_gnutls_read_error(thisreadbytes, scs);
 					return 0;
@@ -240,9 +242,11 @@ tlscomm_expect(struct connection_state *scs,
 			} else
 #endif
 			{
-				thisreadbytes =
-					read(scs->sd, &scs->unprocessed[buffered_bytes],
-						 BUF_SIZE - 1 - buffered_bytes);
+				do {
+					thisreadbytes =
+						read(scs->sd, &scs->unprocessed[buffered_bytes],
+							 BUF_SIZE - 1 - buffered_bytes);
+				} while (thisreadbytes == EAGAIN);
 				if (thisreadbytes < 0) {
 					TDM(DEBUG_ERROR, "%s: error reading: %s\n",
 						scs->name, strerror(errno));


More information about the Pkg-wmaker-devel mailing list