mirror of
https://github.com/nginx/nginx.git
synced 2024-12-01 03:17:17 +08:00
Fastcgi: fixed padding handling on fixed-size records.
Padding was incorrectly ignored on end request, empty stdout and stderr fastcgi records. This resulted in protocol desynchronization if fastcgi application used these records with padding for some reason. Reported by Ilia Vinokurov.
This commit is contained in:
parent
b34f84d8de
commit
9114f08863
@ -1356,7 +1356,11 @@ ngx_http_fastcgi_process_header(ngx_http_request_t *r)
|
||||
}
|
||||
|
||||
} else {
|
||||
f->state = ngx_http_fastcgi_st_version;
|
||||
if (f->padding) {
|
||||
f->state = ngx_http_fastcgi_st_padding;
|
||||
} else {
|
||||
f->state = ngx_http_fastcgi_st_version;
|
||||
}
|
||||
}
|
||||
|
||||
continue;
|
||||
@ -1689,7 +1693,12 @@ ngx_http_fastcgi_input_filter(ngx_event_pipe_t *p, ngx_buf_t *buf)
|
||||
}
|
||||
|
||||
if (f->type == NGX_HTTP_FASTCGI_STDOUT && f->length == 0) {
|
||||
f->state = ngx_http_fastcgi_st_version;
|
||||
|
||||
if (f->padding) {
|
||||
f->state = ngx_http_fastcgi_st_padding;
|
||||
} else {
|
||||
f->state = ngx_http_fastcgi_st_version;
|
||||
}
|
||||
|
||||
if (!flcf->keep_conn) {
|
||||
p->upstream_done = 1;
|
||||
@ -1702,7 +1711,13 @@ ngx_http_fastcgi_input_filter(ngx_event_pipe_t *p, ngx_buf_t *buf)
|
||||
}
|
||||
|
||||
if (f->type == NGX_HTTP_FASTCGI_END_REQUEST) {
|
||||
f->state = ngx_http_fastcgi_st_version;
|
||||
|
||||
if (f->padding) {
|
||||
f->state = ngx_http_fastcgi_st_padding;
|
||||
} else {
|
||||
f->state = ngx_http_fastcgi_st_version;
|
||||
}
|
||||
|
||||
p->upstream_done = 1;
|
||||
|
||||
if (flcf->keep_conn) {
|
||||
@ -1775,7 +1790,11 @@ ngx_http_fastcgi_input_filter(ngx_event_pipe_t *p, ngx_buf_t *buf)
|
||||
}
|
||||
|
||||
} else {
|
||||
f->state = ngx_http_fastcgi_st_version;
|
||||
if (f->padding) {
|
||||
f->state = ngx_http_fastcgi_st_padding;
|
||||
} else {
|
||||
f->state = ngx_http_fastcgi_st_version;
|
||||
}
|
||||
}
|
||||
|
||||
continue;
|
||||
|
Loading…
Reference in New Issue
Block a user