@@ -1302,6 +1302,7 @@ parse_status_line(ngx_http_request_t *r, passenger_context_t *context)
13021302 return NGX_HTTP_SCGI_PARSE_NO_HEADER ;
13031303 }
13041304
1305+ r -> http_major = ch - '0' ;
13051306 state = sw_major_digit ;
13061307 break ;
13071308
@@ -1316,6 +1317,11 @@ parse_status_line(ngx_http_request_t *r, passenger_context_t *context)
13161317 return NGX_HTTP_SCGI_PARSE_NO_HEADER ;
13171318 }
13181319
1320+ if (r -> http_major > 99 ) {
1321+ return NGX_HTTP_SCGI_PARSE_NO_HEADER ;
1322+ }
1323+
1324+ r -> http_major = r -> http_major * 10 + (ch - '0' );
13191325 break ;
13201326
13211327 /* the first digit of minor HTTP version */
@@ -1324,6 +1330,7 @@ parse_status_line(ngx_http_request_t *r, passenger_context_t *context)
13241330 return NGX_HTTP_SCGI_PARSE_NO_HEADER ;
13251331 }
13261332
1333+ r -> http_minor = ch - '0' ;
13271334 state = sw_minor_digit ;
13281335 break ;
13291336
@@ -1338,6 +1345,11 @@ parse_status_line(ngx_http_request_t *r, passenger_context_t *context)
13381345 return NGX_HTTP_SCGI_PARSE_NO_HEADER ;
13391346 }
13401347
1348+ if (r -> http_minor > 99 ) {
1349+ return NGX_HTTP_SCGI_PARSE_NO_HEADER ;
1350+ }
1351+
1352+ r -> http_minor = r -> http_minor * 10 + (ch - '0' );
13411353 break ;
13421354
13431355 /* HTTP status code */
@@ -1350,7 +1362,7 @@ parse_status_line(ngx_http_request_t *r, passenger_context_t *context)
13501362 return NGX_HTTP_SCGI_PARSE_NO_HEADER ;
13511363 }
13521364
1353- context -> status = context -> status * 10 + ch - '0' ;
1365+ context -> status = context -> status * 10 + ( ch - '0' ) ;
13541366
13551367 if (++ context -> status_count == 3 ) {
13561368 state = sw_space_after_status ;
@@ -1827,7 +1839,13 @@ passenger_content_handler(ngx_http_request_t *r)
18271839 u -> pipe -> input_filter = ngx_event_pipe_copy_input_filter ;
18281840 u -> pipe -> input_ctx = r ;
18291841
1830- r -> request_body_no_buffering = !slcf -> upstream_config .request_buffering ;
1842+ if (!slcf -> upstream_config .request_buffering
1843+ && slcf -> upstream_config .pass_request_body
1844+ && !r -> headers_in .chunked ) {
1845+ r -> request_body_no_buffering = 1 ;
1846+ } else {
1847+ r -> request_body_no_buffering = !slcf -> upstream_config .request_buffering ;
1848+ }
18311849
18321850 rc = ngx_http_read_client_request_body (r , ngx_http_upstream_init );
18331851
0 commit comments