Well, crashed again at the same place, ("if (TLS_buffer[i] == '\n')"
line). So, better patch is attached.

-- 
...Bye..Dmitry.
--- echoping-6.0.2.orig/readline.c
+++ echoping-6.0.2/readline.c
@@ -139,7 +139,8 @@
        if (ln) {
                /* Empty buffer */
                if (buf_end == 0) {
-                       rc = gnutls_record_recv(session, TLS_buffer, maxlen);
+                       rc = gnutls_record_recv(session, TLS_buffer,
+                                               maxlen > MAXTOREAD ? MAXTOREAD : maxlen);
                        if (rc == -1)
                                return rc;
                        buf_end = rc;
@@ -148,23 +149,24 @@
                /* No more data in the buffer */
                else if (buf_ptr == buf_end) {
                        buf_ptr = 0;
-                       rc = gnutls_record_recv(session, TLS_buffer, maxlen);
+                       rc = gnutls_record_recv(session, TLS_buffer,
+                                               maxlen > MAXTOREAD ? MAXTOREAD : maxlen);
                        if (rc == -1)
                                return rc;
                        buf_end = rc;
                } else if (TLS_buffer[buf_end] != '\n') {
                        rc = gnutls_record_recv(session, TLS_buffer + buf_end,
-                                               maxlen);
+                                               maxlen > MAXTOREAD - buf_end ? MAXTOREAD - buf_end : maxlen);
                        if (rc == -1)
                                return rc;
                        buf_end = buf_end + rc;
                }
                for (oi = buf_ptr, i = buf_ptr;
-                    i <= buf_end && TLS_buffer[i] != '\n'; i++) {
+                    i < buf_end && TLS_buffer[i] != '\n'; i++) {
                        *ptr++ = TLS_buffer[i];
                        buf_ptr++;
                }
-               if (TLS_buffer[i] == '\n')
+               if (i < buf_end && TLS_buffer[i] == '\n')
                        buf_ptr++;
                *ptr = '\0';
                /* printf ("DEBUG: TLS_readline returns %d (%s)\n", i - oi,

Reply via email to