Deleted
Added
nxt_http_parse.c (454:82c827d1cd13) | nxt_http_parse.c (480:11b28d6fc462) |
---|---|
1 2/* 3 * Copyright (C) NGINX, Inc. 4 * Copyright (C) Valentin V. Bartenev 5 */ 6 7#include <nxt_main.h> 8 --- 217 unchanged lines hidden (view full) --- 226 } 227 228 if (rp->method.start == p && (ch == NXT_CR || ch == NXT_LF)) { 229 rp->method.start++; 230 p++; 231 continue; 232 } 233 | 1 2/* 3 * Copyright (C) NGINX, Inc. 4 * Copyright (C) Valentin V. Bartenev 5 */ 6 7#include <nxt_main.h> 8 --- 217 unchanged lines hidden (view full) --- 226 } 227 228 if (rp->method.start == p && (ch == NXT_CR || ch == NXT_LF)) { 229 rp->method.start++; 230 p++; 231 continue; 232 } 233 |
234 return NXT_ERROR; | 234 return NXT_HTTP_PARSE_INVALID; |
235 } 236 237 p++; 238 239 if (nxt_slow_path(p == end)) { 240 return NXT_AGAIN; 241 } 242 --- 58 unchanged lines hidden (view full) --- 301 case NXT_HTTP_TARGET_HASH: 302 rp->complex_target = 1; 303 goto rest_of_target; 304 305 case NXT_HTTP_TARGET_AGAIN: 306 return NXT_AGAIN; 307 308 case NXT_HTTP_TARGET_BAD: | 235 } 236 237 p++; 238 239 if (nxt_slow_path(p == end)) { 240 return NXT_AGAIN; 241 } 242 --- 58 unchanged lines hidden (view full) --- 301 case NXT_HTTP_TARGET_HASH: 302 rp->complex_target = 1; 303 goto rest_of_target; 304 305 case NXT_HTTP_TARGET_AGAIN: 306 return NXT_AGAIN; 307 308 case NXT_HTTP_TARGET_BAD: |
309 return NXT_ERROR; | 309 return NXT_HTTP_PARSE_INVALID; |
310 } 311 312 nxt_unreachable(); 313 } 314 315rest_of_target: 316 317 for ( ;; ) { --- 9 unchanged lines hidden (view full) --- 327 case NXT_HTTP_TARGET_HASH: 328 rp->complex_target = 1; 329 continue; 330 331 case NXT_HTTP_TARGET_AGAIN: 332 return NXT_AGAIN; 333 334 case NXT_HTTP_TARGET_BAD: | 310 } 311 312 nxt_unreachable(); 313 } 314 315rest_of_target: 316 317 for ( ;; ) { --- 9 unchanged lines hidden (view full) --- 327 case NXT_HTTP_TARGET_HASH: 328 rp->complex_target = 1; 329 continue; 330 331 case NXT_HTTP_TARGET_AGAIN: 332 return NXT_AGAIN; 333 334 case NXT_HTTP_TARGET_BAD: |
335 return NXT_ERROR; | 335 return NXT_HTTP_PARSE_INVALID; |
336 337 default: 338 continue; 339 } 340 341 nxt_unreachable(); 342 } 343 --- 58 unchanged lines hidden (view full) --- 402 if (nxt_fast_path(p[9] == '\r')) { 403 p += 10; 404 405 if (nxt_slow_path(p == end)) { 406 return NXT_AGAIN; 407 } 408 409 if (nxt_slow_path(*p != '\n')) { | 336 337 default: 338 continue; 339 } 340 341 nxt_unreachable(); 342 } 343 --- 58 unchanged lines hidden (view full) --- 402 if (nxt_fast_path(p[9] == '\r')) { 403 p += 10; 404 405 if (nxt_slow_path(p == end)) { 406 return NXT_AGAIN; 407 } 408 409 if (nxt_slow_path(*p != '\n')) { |
410 return NXT_ERROR; | 410 return NXT_HTTP_PARSE_INVALID; |
411 } 412 413 *pos = p + 1; 414 415 } else { 416 *pos = p + 10; 417 } 418 --- 68 unchanged lines hidden (view full) --- 487 return NXT_OK; 488 } 489 } 490 491 /* absolute path or '*' */ 492 493 /* TODO */ 494 | 411 } 412 413 *pos = p + 1; 414 415 } else { 416 *pos = p + 10; 417 } 418 --- 68 unchanged lines hidden (view full) --- 487 return NXT_OK; 488 } 489 } 490 491 /* absolute path or '*' */ 492 493 /* TODO */ 494 |
495 return NXT_ERROR; | 495 return NXT_HTTP_PARSE_INVALID; |
496} 497 498 499static nxt_int_t 500nxt_http_parse_field_name(nxt_http_request_parse_t *rp, u_char **pos, 501 u_char *end) 502{ 503 u_char *p, c; --- 46 unchanged lines hidden (view full) --- 550 551 while (nxt_fast_path(p != end)) { 552 nxt_field_name_test_char(*p); p++; 553 } 554 555 len = p - *pos; 556 557 if (nxt_slow_path(len > NXT_HTTP_MAX_FIELD_NAME)) { | 496} 497 498 499static nxt_int_t 500nxt_http_parse_field_name(nxt_http_request_parse_t *rp, u_char **pos, 501 u_char *end) 502{ 503 u_char *p, c; --- 46 unchanged lines hidden (view full) --- 550 551 while (nxt_fast_path(p != end)) { 552 nxt_field_name_test_char(*p); p++; 553 } 554 555 len = p - *pos; 556 557 if (nxt_slow_path(len > NXT_HTTP_MAX_FIELD_NAME)) { |
558 return NXT_ERROR; | 558 return NXT_HTTP_PARSE_TOO_LARGE_FIELD; |
559 } 560 561 rp->field_hash = hash; 562 rp->field_name.length = len; 563 564 rp->handler = &nxt_http_parse_field_name; 565 566 return NXT_AGAIN; 567 568name_end: 569 570 if (nxt_fast_path(*p == ':')) { 571 if (nxt_slow_path(p == *pos)) { | 559 } 560 561 rp->field_hash = hash; 562 rp->field_name.length = len; 563 564 rp->handler = &nxt_http_parse_field_name; 565 566 return NXT_AGAIN; 567 568name_end: 569 570 if (nxt_fast_path(*p == ':')) { 571 if (nxt_slow_path(p == *pos)) { |
572 return NXT_ERROR; | 572 return NXT_HTTP_PARSE_INVALID; |
573 } 574 575 len = p - *pos; 576 577 if (nxt_slow_path(len > NXT_HTTP_MAX_FIELD_NAME)) { | 573 } 574 575 len = p - *pos; 576 577 if (nxt_slow_path(len > NXT_HTTP_MAX_FIELD_NAME)) { |
578 return NXT_ERROR; | 578 return NXT_HTTP_PARSE_TOO_LARGE_FIELD; |
579 } 580 581 rp->field_hash = hash; 582 583 rp->field_name.length = len; 584 rp->field_name.start = *pos; 585 586 *pos = p + 1; 587 588 return nxt_http_parse_field_value(rp, pos, end); 589 } 590 591 if (nxt_slow_path(p != *pos)) { | 579 } 580 581 rp->field_hash = hash; 582 583 rp->field_name.length = len; 584 rp->field_name.start = *pos; 585 586 *pos = p + 1; 587 588 return nxt_http_parse_field_value(rp, pos, end); 589 } 590 591 if (nxt_slow_path(p != *pos)) { |
592 return NXT_ERROR; | 592 return NXT_HTTP_PARSE_INVALID; |
593 } 594 595 return nxt_http_parse_field_end(rp, pos, end); 596} 597 598 599static nxt_int_t 600nxt_http_parse_field_value(nxt_http_request_parse_t *rp, u_char **pos, --- 24 unchanged lines hidden (view full) --- 625 626 for ( ;; ) { 627 p = nxt_http_lookup_field_end(p, end); 628 629 if (nxt_slow_path(p == end)) { 630 len = p - *pos; 631 632 if (nxt_slow_path(len > NXT_HTTP_MAX_FIELD_VALUE)) { | 593 } 594 595 return nxt_http_parse_field_end(rp, pos, end); 596} 597 598 599static nxt_int_t 600nxt_http_parse_field_value(nxt_http_request_parse_t *rp, u_char **pos, --- 24 unchanged lines hidden (view full) --- 625 626 for ( ;; ) { 627 p = nxt_http_lookup_field_end(p, end); 628 629 if (nxt_slow_path(p == end)) { 630 len = p - *pos; 631 632 if (nxt_slow_path(len > NXT_HTTP_MAX_FIELD_VALUE)) { |
633 return NXT_ERROR; | 633 return NXT_HTTP_PARSE_TOO_LARGE_FIELD; |
634 } 635 636 rp->field_value.length = len; 637 rp->handler = &nxt_http_parse_field_value; 638 return NXT_AGAIN; 639 } 640 641 ch = *p; 642 643 if (nxt_fast_path(ch == '\r' || ch == '\n')) { 644 break; 645 } 646 647 if (ch == '\0') { | 634 } 635 636 rp->field_value.length = len; 637 rp->handler = &nxt_http_parse_field_value; 638 return NXT_AGAIN; 639 } 640 641 ch = *p; 642 643 if (nxt_fast_path(ch == '\r' || ch == '\n')) { 644 break; 645 } 646 647 if (ch == '\0') { |
648 return NXT_ERROR; | 648 return NXT_HTTP_PARSE_INVALID; |
649 } 650 } 651 652 if (nxt_fast_path(p != *pos)) { 653 while (p[-1] == ' ') { 654 p--; 655 } 656 } 657 658 len = p - *pos; 659 660 if (nxt_slow_path(len > NXT_HTTP_MAX_FIELD_VALUE)) { | 649 } 650 } 651 652 if (nxt_fast_path(p != *pos)) { 653 while (p[-1] == ' ') { 654 p--; 655 } 656 } 657 658 len = p - *pos; 659 660 if (nxt_slow_path(len > NXT_HTTP_MAX_FIELD_VALUE)) { |
661 return NXT_ERROR; | 661 return NXT_HTTP_PARSE_TOO_LARGE_FIELD; |
662 } 663 664 rp->field_value.length = len; 665 rp->field_value.start = *pos; 666 667 *pos = p; 668 669 return nxt_http_parse_field_end(rp, pos, end); --- 109 unchanged lines hidden (view full) --- 779 780 rp->handler = &nxt_http_parse_field_name; 781 return NXT_OK; 782 } 783 784 return NXT_DONE; 785 } 786 | 662 } 663 664 rp->field_value.length = len; 665 rp->field_value.start = *pos; 666 667 *pos = p; 668 669 return nxt_http_parse_field_end(rp, pos, end); --- 109 unchanged lines hidden (view full) --- 779 780 rp->handler = &nxt_http_parse_field_name; 781 return NXT_OK; 782 } 783 784 return NXT_DONE; 785 } 786 |
787 return NXT_ERROR; | 787 return NXT_HTTP_PARSE_INVALID; |
788} 789 790 791#define \ 792nxt_http_is_normal(c) \ 793 (nxt_fast_path((nxt_http_normal[c / 8] & (1 << (c & 7))) != 0)) 794 795 --- 175 unchanged lines hidden (view full) --- 971 } 972 973 switch (ch) { 974 case '/': 975 state = sw_slash; 976 u -= 5; 977 for ( ;; ) { 978 if (u < rp->path.start) { | 788} 789 790 791#define \ 792nxt_http_is_normal(c) \ 793 (nxt_fast_path((nxt_http_normal[c / 8] & (1 << (c & 7))) != 0)) 794 795 --- 175 unchanged lines hidden (view full) --- 971 } 972 973 switch (ch) { 974 case '/': 975 state = sw_slash; 976 u -= 5; 977 for ( ;; ) { 978 if (u < rp->path.start) { |
979 return NXT_ERROR; | 979 return NXT_HTTP_PARSE_INVALID; |
980 } 981 if (*u == '/') { 982 u++; 983 break; 984 } 985 u--; 986 } 987 break; --- 29 unchanged lines hidden (view full) --- 1017 1018 c = (u_char) (ch | 0x20); 1019 if (c >= 'a' && c <= 'f') { 1020 high = (u_char) (c - 'a' + 10); 1021 state = sw_quoted_second; 1022 continue; 1023 } 1024 | 980 } 981 if (*u == '/') { 982 u++; 983 break; 984 } 985 u--; 986 } 987 break; --- 29 unchanged lines hidden (view full) --- 1017 1018 c = (u_char) (ch | 0x20); 1019 if (c >= 'a' && c <= 'f') { 1020 high = (u_char) (c - 'a' + 10); 1021 state = sw_quoted_second; 1022 continue; 1023 } 1024 |
1025 return NXT_ERROR; | 1025 return NXT_HTTP_PARSE_INVALID; |
1026 1027 case sw_quoted_second: 1028 if (ch >= '0' && ch <= '9') { 1029 ch = (u_char) ((high << 4) + ch - '0'); 1030 1031 if (ch == '%' || ch == '#') { 1032 state = sw_normal; 1033 *u++ = ch; 1034 continue; 1035 1036 } else if (ch == '\0') { | 1026 1027 case sw_quoted_second: 1028 if (ch >= '0' && ch <= '9') { 1029 ch = (u_char) ((high << 4) + ch - '0'); 1030 1031 if (ch == '%' || ch == '#') { 1032 state = sw_normal; 1033 *u++ = ch; 1034 continue; 1035 1036 } else if (ch == '\0') { |
1037 return NXT_ERROR; | 1037 return NXT_HTTP_PARSE_INVALID; |
1038 } 1039 1040 state = saved_state; 1041 goto again; 1042 } 1043 1044 c = (u_char) (ch | 0x20); 1045 if (c >= 'a' && c <= 'f') { --- 7 unchanged lines hidden (view full) --- 1053 } else if (ch == '+') { 1054 rp->plus_in_target = 1; 1055 } 1056 1057 state = saved_state; 1058 goto again; 1059 } 1060 | 1038 } 1039 1040 state = saved_state; 1041 goto again; 1042 } 1043 1044 c = (u_char) (ch | 0x20); 1045 if (c >= 'a' && c <= 'f') { --- 7 unchanged lines hidden (view full) --- 1053 } else if (ch == '+') { 1054 rp->plus_in_target = 1; 1055 } 1056 1057 state = saved_state; 1058 goto again; 1059 } 1060 |
1061 return NXT_ERROR; | 1061 return NXT_HTTP_PARSE_INVALID; |
1062 } 1063 } 1064 1065 if (state >= sw_quoted) { | 1062 } 1063 } 1064 1065 if (state >= sw_quoted) { |
1066 return NXT_ERROR; | 1066 return NXT_HTTP_PARSE_INVALID; |
1067 } 1068 1069args: 1070 1071 for (/* void */; p < rp->target_end; p++) { 1072 if (*p == '#') { 1073 break; 1074 } --- 179 unchanged lines hidden --- | 1067 } 1068 1069args: 1070 1071 for (/* void */; p < rp->target_end; p++) { 1072 if (*p == '#') { 1073 break; 1074 } --- 179 unchanged lines hidden --- |