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) {