]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: smtp-syntax - Do not allow NULL return parameters for smtp_ehlo_line_parse().
authorStephan Bosch <stephan.bosch@open-xchange.com>
Tue, 24 Mar 2020 20:14:34 +0000 (21:14 +0100)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 20 May 2020 05:26:26 +0000 (05:26 +0000)
src/lib-smtp/smtp-syntax.c

index 25f52c1deab20fda50cac8a49898515c65c92525..a8cead56c59229e38ef7095612d3df063c5399b6 100644 (file)
@@ -250,12 +250,10 @@ smtp_parse_ehlo_line(struct smtp_parser *parser, const char **key_r,
               (i_isalnum(*parser->cur) || *parser->cur == '-'))
                parser->cur++;
 
-       if (key_r != NULL)
-               *key_r = p_strdup_until(parser->pool, pbegin, parser->cur);
+       *key_r = p_strdup_until(parser->pool, pbegin, parser->cur);
 
        if (parser->cur >= parser->end) {
-               if (params_r != NULL)
-                       *params_r = p_new(parser->pool, const char *, 1);
+               *params_r = p_new(parser->pool, const char *, 1);
                return 1;
        }
        if (*parser->cur != ' ') {
@@ -265,8 +263,7 @@ smtp_parse_ehlo_line(struct smtp_parser *parser, const char **key_r,
        parser->cur++;
 
        pbegin = parser->cur;
-       if (params_r != NULL)
-               p_array_init(&params, parser->pool, 32);
+       p_array_init(&params, parser->pool, 32);
        while (parser->cur < parser->end) {
                if (*parser->cur == ' ') {
                        if (parser->cur+1 >= parser->end ||
@@ -275,11 +272,9 @@ smtp_parse_ehlo_line(struct smtp_parser *parser, const char **key_r,
                                        "Missing EHLO parameter after ' '";
                                return -1;
                        }
-                       if (params_r != NULL) {
-                               param = p_strdup_until(parser->pool, pbegin,
-                                                      parser->cur);
-                               array_push_back(&params, &param);
-                       }
+                       param = p_strdup_until(parser->pool, pbegin,
+                                              parser->cur);
+                       array_push_back(&params, &param);
                        pbegin = parser->cur + 1;
                } else if (!smtp_char_is_ehlo_param(*parser->cur)) {
                        parser->error =
@@ -289,12 +284,10 @@ smtp_parse_ehlo_line(struct smtp_parser *parser, const char **key_r,
                parser->cur++;
        }
 
-       if (params_r != NULL) {
-               param = p_strdup_until(parser->pool, pbegin, parser->cur);
-               array_push_back(&params, &param);
-               array_append_zero(&params);
-               *params_r = array_front(&params);
-       }
+       param = p_strdup_until(parser->pool, pbegin, parser->cur);
+       array_push_back(&params, &param);
+       array_append_zero(&params);
+       *params_r = array_front(&params);
        return 1;
 }
 
@@ -303,17 +296,19 @@ int smtp_ehlo_line_parse(const char *ehlo_line, const char **key_r,
 {
        struct smtp_parser parser;
 
+       *key_r = NULL;
+       *params_r = NULL;
+       *error_r = NULL;
+
        if (ehlo_line == NULL || *ehlo_line == '\0') {
-               if (error_r != NULL)
-                       *error_r = "Parameter is empty";
+               *error_r = "Parameter is empty";
                return -1;
        }
 
        smtp_parser_init(&parser, pool_datastack_create(), ehlo_line);
 
        if (smtp_parse_ehlo_line(&parser, key_r, params_r) <= 0) {
-               if (error_r != NULL)
-                       *error_r = parser.error;
+               *error_r = parser.error;
                return -1;
        }
        return 1;