X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=blobdiff_plain;f=src%2Fsocket.c;h=d739a71846fba95cd3832b0e7538227d034d409b;hp=e0b5f20131ecf96930504bb5feb7cfb786d730a7;hb=fd5ab1803eb18c398732d8b73f6d052dd0d3eede;hpb=8ee6369502f5c726aa26b8c87e8831a8d067c96b diff --git a/src/socket.c b/src/socket.c index e0b5f2013..d739a7184 100644 --- a/src/socket.c +++ b/src/socket.c @@ -447,20 +447,21 @@ gint fd_gets(gint fd, gchar *buf, gint len) #if USE_SSL gint ssl_gets(SSL *ssl, gchar *buf, gint len) { - gchar *bp = buf; - gboolean newline = FALSE; + gchar *newline, *bp = buf; gint n; if (--len < 1) return -1; - while (len > 0 && !newline) { - *bp = '\0'; - if ((n = SSL_read(ssl, bp, 1)) <= 0) + do { + if ((n = SSL_peek(ssl, bp, len)) <= 0) + return -1; + if ((newline = memchr(bp, '\n', n)) != NULL) + n = newline - bp + 1; + if ((n = SSL_read(ssl, bp, n)) < 0) return -1; - if (*bp == '\n') - newline = TRUE; bp += n; - } + len -= n; + } while (!newline && len); *bp = '\0'; return bp - buf;