ngx_ssl_recv_chain() must not update buf->last,
it fixes proxy_pass https://...
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
index f8af57e..5bd3b6a 100644
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -547,22 +547,32 @@
ssize_t
ngx_ssl_recv_chain(ngx_connection_t *c, ngx_chain_t *cl)
{
+ u_char *last;
ssize_t n, bytes;
ngx_buf_t *b;
bytes = 0;
- while (cl) {
- b = cl->buf;
+ b = cl->buf;
+ last = b->last;
- n = ngx_ssl_recv(c, b->last, b->end - b->last);
+ for ( ;; ) {
+
+ n = ngx_ssl_recv(c, last, b->end - last);
if (n > 0) {
- b->last += n;
+ last += n;
bytes += n;
- if (b->last == b->end) {
+ if (last == b->end) {
cl = cl->next;
+
+ if (cl == NULL) {
+ return bytes;
+ }
+
+ b = cl->buf;
+ last = b->last;
}
continue;
@@ -574,8 +584,6 @@
return n;
}
-
- return bytes;
}