comparison src/http/ngx_http_parse.c @ 7884:b87b7092cedb

Improved logging of invalid headers. In 71edd9192f24 logging of invalid headers which were rejected with the NGX_HTTP_PARSE_INVALID_HEADER error was restricted to just the "client sent invalid header line" message, without any attempts to log the header itself. This patch returns logging of the header up to the invalid character and the character itself. The r->header_end pointer is now properly set in all cases to make logging possible. The same logging is also introduced when parsing headers from upstream servers.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 28 Jun 2021 18:01:20 +0300
parents 41f4bd4c51f1
children ef6a3a99a81a 6674a50cbb6c
comparison
equal deleted inserted replaced
7883:41f4bd4c51f1 7884:b87b7092cedb
892 892
893 break; 893 break;
894 } 894 }
895 895
896 if (ch <= 0x20 || ch == 0x7f || ch == ':') { 896 if (ch <= 0x20 || ch == 0x7f || ch == ':') {
897 r->header_end = p;
897 return NGX_HTTP_PARSE_INVALID_HEADER; 898 return NGX_HTTP_PARSE_INVALID_HEADER;
898 } 899 }
899 900
900 hash = 0; 901 hash = 0;
901 i = 0; 902 i = 0;
960 state = sw_ignore_line; 961 state = sw_ignore_line;
961 break; 962 break;
962 } 963 }
963 964
964 if (ch <= 0x20 || ch == 0x7f) { 965 if (ch <= 0x20 || ch == 0x7f) {
966 r->header_end = p;
965 return NGX_HTTP_PARSE_INVALID_HEADER; 967 return NGX_HTTP_PARSE_INVALID_HEADER;
966 } 968 }
967 969
968 r->invalid_header = 1; 970 r->invalid_header = 1;
969 971
982 case LF: 984 case LF:
983 r->header_start = p; 985 r->header_start = p;
984 r->header_end = p; 986 r->header_end = p;
985 goto done; 987 goto done;
986 case '\0': 988 case '\0':
989 r->header_end = p;
987 return NGX_HTTP_PARSE_INVALID_HEADER; 990 return NGX_HTTP_PARSE_INVALID_HEADER;
988 default: 991 default:
989 r->header_start = p; 992 r->header_start = p;
990 state = sw_value; 993 state = sw_value;
991 break; 994 break;
1005 break; 1008 break;
1006 case LF: 1009 case LF:
1007 r->header_end = p; 1010 r->header_end = p;
1008 goto done; 1011 goto done;
1009 case '\0': 1012 case '\0':
1013 r->header_end = p;
1010 return NGX_HTTP_PARSE_INVALID_HEADER; 1014 return NGX_HTTP_PARSE_INVALID_HEADER;
1011 } 1015 }
1012 break; 1016 break;
1013 1017
1014 /* space* before end of header line */ 1018 /* space* before end of header line */
1020 state = sw_almost_done; 1024 state = sw_almost_done;
1021 break; 1025 break;
1022 case LF: 1026 case LF:
1023 goto done; 1027 goto done;
1024 case '\0': 1028 case '\0':
1029 r->header_end = p;
1025 return NGX_HTTP_PARSE_INVALID_HEADER; 1030 return NGX_HTTP_PARSE_INVALID_HEADER;
1026 default: 1031 default:
1027 state = sw_value; 1032 state = sw_value;
1028 break; 1033 break;
1029 } 1034 }