changeset 314:8f0416b14242 NGINX_0_5_27

nginx 0.5.27 *) Bugfix: if remote SSI subrequest was used, then posterior local file subrequest might transferred to client in wrong order. *) Bugfix: large SSI inclusions buffered in temporary files were truncated.
author Igor Sysoev <http://sysoev.ru>
date Mon, 09 Jul 2007 00:00:00 +0400
parents 1708cc3ec3be
children 32a7c84208fa
files CHANGES CHANGES.ru src/core/nginx.h src/http/modules/ngx_http_fastcgi_module.c src/http/modules/ngx_http_ssi_filter_module.c src/http/modules/perl/nginx.pm src/http/ngx_http_copy_filter_module.c src/http/ngx_http_upstream.c
diffstat 8 files changed, 51 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,13 @@
 
+Changes with nginx 0.5.27                                        09 Jul 2007
+
+    *) Bugfix: if remote SSI subrequest was used, then posterior local file 
+       subrequest might transferred to client in wrong order.
+
+    *) Bugfix: large SSI inclusions buffered in temporary files were 
+       truncated.
+
+
 Changes with nginx 0.5.26                                        17 Jun 2007
 
     *) Bugfix: in SSI parsing.
--- a/CHANGES.ru
+++ b/CHANGES.ru
@@ -1,4 +1,14 @@
 
+Изменения в nginx 0.5.27                                          09.07.2007
+
+    *) Исправление: при использовании удалённого подзапроса в SSI 
+       последующий подзапрос локального файла мог отдаваться клиенту в 
+       неверном порядке.
+
+    *) Исправление: большие включения в SSI, сохранённые во временные 
+       файлы, передавались не полностью.
+
+
 Изменения в nginx 0.5.26                                          17.06.2007
 
     *) Исправление: в парсинге SSI.
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -8,7 +8,7 @@
 #define _NGINX_H_INCLUDED_
 
 
-#define NGINX_VERSION      "0.5.26"
+#define NGINX_VERSION      "0.5.27"
 #define NGINX_VER          "nginx/" NGINX_VERSION
 
 #define NGINX_VAR          "NGINX"
--- a/src/http/modules/ngx_http_fastcgi_module.c
+++ b/src/http/modules/ngx_http_fastcgi_module.c
@@ -1144,16 +1144,16 @@ ngx_http_fastcgi_process_header(ngx_http
             return NGX_OK;
         }
 
-        if (u->buffer.pos == u->buffer.last) {
+        if (rc == NGX_OK) {
             return NGX_AGAIN;
         }
 
-        if (rc == NGX_AGAIN) {
-            ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
-                          "upstream split a header line in FastCGI records");
-
-            return NGX_HTTP_UPSTREAM_INVALID_HEADER;
-        }
+        /* rc == NGX_AGAIN */
+
+        ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
+                      "upstream split a header line in FastCGI records");
+
+        return NGX_HTTP_UPSTREAM_INVALID_HEADER;
     }
 }
 
--- a/src/http/modules/ngx_http_ssi_filter_module.c
+++ b/src/http/modules/ngx_http_ssi_filter_module.c
@@ -800,8 +800,14 @@ ngx_http_ssi_body_filter(ngx_http_reques
                     }
                 }
 
-                if (cmd->flush && ctx->out) {
-                    rc = ngx_http_ssi_output(r, ctx);
+                if (cmd->flush) {
+
+                    if (ctx->out) {
+                        rc = ngx_http_ssi_output(r, ctx);
+
+                    } else {
+                        rc = ngx_http_next_body_filter(r, NULL);
+                    }
 
                     if (rc == NGX_ERROR) {
                         return NGX_ERROR;
--- a/src/http/modules/perl/nginx.pm
+++ b/src/http/modules/perl/nginx.pm
@@ -47,7 +47,7 @@ our @EXPORT = qw(
     HTTP_INSUFFICIENT_STORAGE
 );
 
-our $VERSION = '0.5.26';
+our $VERSION = '0.5.27';
 
 require XSLoader;
 XSLoader::load('nginx', $VERSION);
--- a/src/http/ngx_http_copy_filter_module.c
+++ b/src/http/ngx_http_copy_filter_module.c
@@ -117,6 +117,10 @@ ngx_http_copy_filter(ngx_http_request_t 
             r->buffered |= NGX_HTTP_COPY_BUFFERED;
         }
 
+        if (r != r->main) {
+            r->out = ctx->in;
+        }
+
 #if (NGX_DEBUG)
         ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
                        "copy filter: %i \"%V?%V\"", rc, &r->uri, &r->args);
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -2157,8 +2157,17 @@ ngx_http_upstream_finalize_request(ngx_h
 
     r->connection->log->action = "sending to client";
 
-    if (rc == 0 && r == r->main && !r->post_action) {
-        rc = ngx_http_send_special(r, NGX_HTTP_LAST);
+    if (rc == 0) {
+        if (r == r->main) {
+            if (!r->post_action) {
+                rc = ngx_http_send_special(r, NGX_HTTP_LAST);
+            }
+
+        } else {
+            if (r->out) {
+                rc = NGX_AGAIN;
+            }
+        }
     }
 
     ngx_http_finalize_request(r, rc);