Mercurial > hg > nginx
view src/os/win32/ngx_errno.h @ 4147:7f64de1cc2c0
Fix for double content when return is used in error_page handler.
Test case:
location / {
error_page 405 /nope;
return 405;
}
location /nope {
return 200;
}
This is expected to return 405 with empty body, but in 0.8.42+ will return
builtin 405 error page as well (though not counted in Content-Length, thus
breaking protocol).
Fix is to use status provided by rewrite script execution in case
it's less than NGX_HTTP_BAD_REQUEST even if r->error_status set. This
check is in line with one in ngx_http_script_return_code().
Note that this patch also changes behaviour for "return 302 ..." and
"rewrite ... redirect" used as error handler. E.g.
location / {
error_page 405 /redirect;
return 405;
}
location /redirect {
rewrite ^ http://example.com/;
}
will actually return redirect to "http://example.com/" instead of builtin 405
error page with meaningless Location header. This looks like correct change
and it's in line with what happens on e.g. directory redirects in error
handlers.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 27 Sep 2011 11:11:30 +0000 |
parents | e294f37401c0 |
children | d620f497c50f |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev */ #ifndef _NGX_ERRNO_H_INCLUDED_ #define _NGX_ERRNO_H_INCLUDED_ #include <ngx_config.h> #include <ngx_core.h> typedef DWORD ngx_err_t; #define ngx_errno GetLastError() #define ngx_set_errno(err) SetLastError(err) #define ngx_socket_errno WSAGetLastError() #define ngx_set_socket_errno(err) WSASetLastError(err) #define NGX_EPERM ERROR_ACCESS_DENIED #define NGX_ENOENT ERROR_FILE_NOT_FOUND #define NGX_ENOPATH ERROR_PATH_NOT_FOUND #define NGX_ENOMEM ERROR_NOT_ENOUGH_MEMORY #define NGX_EACCES ERROR_ACCESS_DENIED /* it's seems that ERROR_FILE_EXISTS is not appropriate error code */ #define NGX_EEXIST ERROR_ALREADY_EXISTS /* * could not found cross volume directory move error code, * so use ERROR_WRONG_DISK as stub one */ #define NGX_EXDEV ERROR_WRONG_DISK #define NGX_ENOTDIR ERROR_PATH_NOT_FOUND #define NGX_EISDIR ERROR_CANNOT_MAKE #define NGX_ENOSPC ERROR_DISK_FULL #define NGX_EPIPE EPIPE #define NGX_EAGAIN WSAEWOULDBLOCK #define NGX_EINPROGRESS WSAEINPROGRESS #define NGX_EADDRINUSE WSAEADDRINUSE #define NGX_ECONNABORTED WSAECONNABORTED #define NGX_ECONNRESET WSAECONNRESET #define NGX_ENOTCONN WSAENOTCONN #define NGX_ETIMEDOUT WSAETIMEDOUT #define NGX_ECONNREFUSED WSAECONNREFUSED #define NGX_ENAMETOOLONG ERROR_BAD_PATHNAME #define NGX_ENETDOWN WSAENETDOWN #define NGX_ENETUNREACH WSAENETUNREACH #define NGX_EHOSTDOWN WSAEHOSTDOWN #define NGX_EHOSTUNREACH WSAEHOSTUNREACH #define NGX_ENOMOREFILES ERROR_NO_MORE_FILES #define NGX_EILSEQ ERROR_NO_UNICODE_TRANSLATION #define NGX_EALREADY WSAEALREADY #define NGX_EINVAL WSAEINVAL u_char *ngx_strerror(ngx_err_t err, u_char *errstr, size_t size); ngx_uint_t ngx_strerror_init(void); #endif /* _NGX_ERRNO_H_INCLUDED_ */