Commit 6cb32cc0 authored by William A. Rowe Jr's avatar William A. Rowe Jr
Browse files

  Clean up the read pattern for cases when some data already exists.
  Also return APR_SUCCESS once we've gathered any decrypted bytes.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk/modules/ssl@97371 13f79535-47bb-0310-9956-ffa450edef68
parent 28d52569
Loading
Loading
Loading
Loading
+12 −2
Changes for ssl_engine_io.c: 12 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -656,9 +656,12 @@ static apr_status_t ssl_io_input_read(bio_filter_in_ctx_t *inctx,
            inctx->cbuf.length += bytes;
            return APR_SUCCESS;
        } 
        if ((*len >= wanted) || inctx->mode == AP_MODE_GETLINE) {
        if (*len >= wanted) {
            return APR_SUCCESS;
        }
        /* Down to a nonblock pattern as we have some data already
         */
        inctx->block = APR_NONBLOCK_READ;
    }

    while (1) {
@@ -683,6 +686,9 @@ static apr_status_t ssl_io_input_read(bio_filter_in_ctx_t *inctx,
            if (APR_STATUS_IS_EAGAIN(inctx->rc)
                    || APR_STATUS_IS_EINTR(inctx->rc)) {
                if (inctx->block == APR_NONBLOCK_READ) {
                    if (*len > 0) {
                        inctx->rc = APR_SUCCESS;
                    }
                    break;
                }
            }
@@ -703,8 +709,12 @@ static apr_status_t ssl_io_input_read(bio_filter_in_ctx_t *inctx,
                 * (This is usually the case when the client forces an SSL
                 * renegotation which is handled implicitly by OpenSSL.)
                 */
                if (inctx->block == APR_NONBLOCK_READ) {
                inctx->rc = APR_EAGAIN;

                if (inctx->block == APR_NONBLOCK_READ) {
                    if (*len > 0) {
                        inctx->rc = APR_SUCCESS;
                    }
                    break; /* non fatal error */
                }
            }