Mercurial > hg > nginx
comparison src/mail/ngx_mail_parse.c @ 7840:379d461eccf4
Mail: removed dead s->arg_start handling.
As discussed in the previous change, s->arg_start handling in the "done"
labels of ngx_mail_pop3_parse_command(), ngx_mail_imap_parse_command(),
and ngx_mail_smtp_parse_command() is wrong: s->arg_start cannot be
set there, as it is handled and cleared on all code paths where the
"done" labels are reached. The relevant code is dead and now removed.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Wed, 19 May 2021 03:13:22 +0300 |
parents | 3974f4e56a4e |
children | ccdf83bee8c1 |
comparison
equal
deleted
inserted
replaced
7839:3974f4e56a4e | 7840:379d461eccf4 |
---|---|
122 switch (ch) { | 122 switch (ch) { |
123 case ' ': | 123 case ' ': |
124 break; | 124 break; |
125 case CR: | 125 case CR: |
126 state = sw_almost_done; | 126 state = sw_almost_done; |
127 s->arg_end = p; | 127 break; |
128 break; | 128 case LF: |
129 case LF: | |
130 s->arg_end = p; | |
131 goto done; | 129 goto done; |
132 default: | 130 default: |
133 if (s->args.nelts <= 2) { | 131 if (s->args.nelts <= 2) { |
134 state = sw_argument; | 132 state = sw_argument; |
135 s->arg_start = p; | 133 s->arg_start = p; |
200 return NGX_AGAIN; | 198 return NGX_AGAIN; |
201 | 199 |
202 done: | 200 done: |
203 | 201 |
204 s->buffer->pos = p + 1; | 202 s->buffer->pos = p + 1; |
205 | |
206 if (s->arg_start) { | |
207 arg = ngx_array_push(&s->args); | |
208 if (arg == NULL) { | |
209 return NGX_ERROR; | |
210 } | |
211 arg->len = s->arg_end - s->arg_start; | |
212 arg->data = s->arg_start; | |
213 s->arg_start = NULL; | |
214 } | |
215 | |
216 s->state = (s->command != NGX_POP3_AUTH) ? sw_start : sw_argument; | 203 s->state = (s->command != NGX_POP3_AUTH) ? sw_start : sw_argument; |
217 | 204 |
218 return NGX_OK; | 205 return NGX_OK; |
219 | 206 |
220 invalid: | 207 invalid: |
221 | 208 |
222 s->state = sw_invalid; | 209 s->state = sw_invalid; |
223 s->arg_start = NULL; | |
224 | 210 |
225 /* skip invalid command till LF */ | 211 /* skip invalid command till LF */ |
226 | 212 |
227 for ( /* void */ ; p < s->buffer->last; p++) { | 213 for ( /* void */ ; p < s->buffer->last; p++) { |
228 if (*p == LF) { | 214 if (*p == LF) { |
434 switch (ch) { | 420 switch (ch) { |
435 case ' ': | 421 case ' ': |
436 break; | 422 break; |
437 case CR: | 423 case CR: |
438 state = sw_almost_done; | 424 state = sw_almost_done; |
439 s->arg_end = p; | 425 break; |
440 break; | 426 case LF: |
441 case LF: | |
442 s->arg_end = p; | |
443 goto done; | 427 goto done; |
444 case '"': | 428 case '"': |
445 if (s->args.nelts <= 2) { | 429 if (s->args.nelts <= 2) { |
446 s->quoted = 1; | 430 s->quoted = 1; |
447 s->arg_start = p + 1; | 431 s->arg_start = p + 1; |
612 return NGX_AGAIN; | 596 return NGX_AGAIN; |
613 | 597 |
614 done: | 598 done: |
615 | 599 |
616 s->buffer->pos = p + 1; | 600 s->buffer->pos = p + 1; |
617 | |
618 if (s->arg_start) { | |
619 arg = ngx_array_push(&s->args); | |
620 if (arg == NULL) { | |
621 return NGX_ERROR; | |
622 } | |
623 arg->len = s->arg_end - s->arg_start; | |
624 arg->data = s->arg_start; | |
625 | |
626 s->arg_start = NULL; | |
627 s->cmd_start = NULL; | |
628 s->quoted = 0; | |
629 s->no_sync_literal = 0; | |
630 s->literal_len = 0; | |
631 } | |
632 | |
633 s->state = (s->command != NGX_IMAP_AUTHENTICATE) ? sw_start : sw_argument; | 601 s->state = (s->command != NGX_IMAP_AUTHENTICATE) ? sw_start : sw_argument; |
634 | 602 |
635 return NGX_OK; | 603 return NGX_OK; |
636 | 604 |
637 invalid: | 605 invalid: |
638 | 606 |
639 s->state = sw_start; | 607 s->state = sw_start; |
640 s->arg_start = NULL; | |
641 s->quoted = 0; | 608 s->quoted = 0; |
642 s->backslash = 0; | 609 s->backslash = 0; |
643 s->no_sync_literal = 0; | 610 s->no_sync_literal = 0; |
644 s->literal_len = 0; | 611 s->literal_len = 0; |
645 | 612 |
784 switch (ch) { | 751 switch (ch) { |
785 case ' ': | 752 case ' ': |
786 break; | 753 break; |
787 case CR: | 754 case CR: |
788 state = sw_almost_done; | 755 state = sw_almost_done; |
789 s->arg_end = p; | 756 break; |
790 break; | 757 case LF: |
791 case LF: | |
792 s->arg_end = p; | |
793 goto done; | 758 goto done; |
794 default: | 759 default: |
795 if (s->args.nelts <= 10) { | 760 if (s->args.nelts <= 10) { |
796 state = sw_argument; | 761 state = sw_argument; |
797 s->arg_start = p; | 762 s->arg_start = p; |
847 return NGX_AGAIN; | 812 return NGX_AGAIN; |
848 | 813 |
849 done: | 814 done: |
850 | 815 |
851 s->buffer->pos = p + 1; | 816 s->buffer->pos = p + 1; |
852 | |
853 if (s->arg_start) { | |
854 arg = ngx_array_push(&s->args); | |
855 if (arg == NULL) { | |
856 return NGX_ERROR; | |
857 } | |
858 arg->len = s->arg_end - s->arg_start; | |
859 arg->data = s->arg_start; | |
860 s->arg_start = NULL; | |
861 } | |
862 | |
863 s->state = (s->command != NGX_SMTP_AUTH) ? sw_start : sw_argument; | 817 s->state = (s->command != NGX_SMTP_AUTH) ? sw_start : sw_argument; |
864 | 818 |
865 return NGX_OK; | 819 return NGX_OK; |
866 | 820 |
867 invalid: | 821 invalid: |
868 | 822 |
869 s->state = sw_invalid; | 823 s->state = sw_invalid; |
870 s->arg_start = NULL; | |
871 | 824 |
872 /* skip invalid command till LF */ | 825 /* skip invalid command till LF */ |
873 | 826 |
874 for ( /* void */ ; p < s->buffer->last; p++) { | 827 for ( /* void */ ; p < s->buffer->last; p++) { |
875 if (*p == LF) { | 828 if (*p == LF) { |