comparison src/mail/ngx_mail_smtp_handler.c @ 5703:7deb01451486

Mail: added a check for the number of arguments in MAIL/RCPT. Missed during introduction of the SMTP pipelining support (04e43d03e153, 1.5.6). Previously, the check wasn't needed as s->buffer was used directly and the number of arguments didn't matter. Reported by Svyatoslav Nikolsky.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 21 May 2014 21:56:20 +0400
parents 98876ce2a7fd
children 3f5d0af4e40a
comparison
equal deleted inserted replaced
5702:777202558122 5703:7deb01451486
677 if (s->smtp_from.len) { 677 if (s->smtp_from.len) {
678 ngx_str_set(&s->out, smtp_bad_sequence); 678 ngx_str_set(&s->out, smtp_bad_sequence);
679 return NGX_OK; 679 return NGX_OK;
680 } 680 }
681 681
682 if (s->args.nelts == 0) {
683 ngx_str_set(&s->out, smtp_invalid_argument);
684 return NGX_OK;
685 }
686
682 arg = s->args.elts; 687 arg = s->args.elts;
683 arg += s->args.nelts - 1; 688 arg += s->args.nelts - 1;
684 689
685 cmd.len = arg->data + arg->len - s->cmd.data; 690 cmd.len = arg->data + arg->len - s->cmd.data;
686 cmd.data = s->cmd.data; 691 cmd.data = s->cmd.data;
708 { 713 {
709 ngx_str_t *arg, cmd; 714 ngx_str_t *arg, cmd;
710 715
711 if (s->smtp_from.len == 0) { 716 if (s->smtp_from.len == 0) {
712 ngx_str_set(&s->out, smtp_bad_sequence); 717 ngx_str_set(&s->out, smtp_bad_sequence);
718 return NGX_OK;
719 }
720
721 if (s->args.nelts == 0) {
722 ngx_str_set(&s->out, smtp_invalid_argument);
713 return NGX_OK; 723 return NGX_OK;
714 } 724 }
715 725
716 arg = s->args.elts; 726 arg = s->args.elts;
717 arg += s->args.nelts - 1; 727 arg += s->args.nelts - 1;