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