/src/dovecot/src/lib-smtp/smtp-parser.h
Line | Count | Source (jump to first uncovered line) |
1 | | #ifndef SMTP_PARSER_H |
2 | | #define SMTP_PARSER_H |
3 | | |
4 | | /* |
5 | | * Character definitions |
6 | | */ |
7 | | |
8 | | extern const uint16_t smtp_xtext_char_mask; |
9 | | extern const uint16_t smtp_atext_char_mask; |
10 | | extern const uint16_t smtp_dcontent_char_mask; |
11 | | extern const uint16_t smtp_qtext_char_mask; |
12 | | extern const uint16_t smtp_textstr_char_mask; |
13 | | extern const uint16_t smtp_esmtp_value_char_mask; |
14 | | extern const uint16_t smtp_ehlo_param_char_mask; |
15 | | extern const uint16_t smtp_ehlo_greet_char_mask; |
16 | | extern const uint16_t smtp_qpair_char_mask; |
17 | | |
18 | | extern const uint16_t smtp_char_lookup[256]; |
19 | | |
20 | | static inline bool |
21 | 0 | smtp_char_is_xtext(unsigned char ch) { |
22 | 0 | return (smtp_char_lookup[ch] & smtp_xtext_char_mask) != 0; |
23 | 0 | } Unexecuted instantiation: smtp-syntax.c:smtp_char_is_xtext Unexecuted instantiation: smtp-address.c:smtp_char_is_xtext Unexecuted instantiation: smtp-params.c:smtp_char_is_xtext Unexecuted instantiation: smtp-reply-parser.c:smtp_char_is_xtext Unexecuted instantiation: smtp-command-parser.c:smtp_char_is_xtext Unexecuted instantiation: smtp-server-cmd-mail.c:smtp_char_is_xtext Unexecuted instantiation: smtp-server-cmd-rcpt.c:smtp_char_is_xtext Unexecuted instantiation: smtp-parser.c:smtp_char_is_xtext |
24 | | static inline bool |
25 | 2.06M | smtp_char_is_atext(unsigned char ch) { |
26 | 2.06M | return (smtp_char_lookup[ch] & smtp_atext_char_mask) != 0; |
27 | 2.06M | } Unexecuted instantiation: smtp-syntax.c:smtp_char_is_atext smtp-address.c:smtp_char_is_atext Line | Count | Source | 25 | 2.04M | smtp_char_is_atext(unsigned char ch) { | 26 | 2.04M | return (smtp_char_lookup[ch] & smtp_atext_char_mask) != 0; | 27 | 2.04M | } |
Unexecuted instantiation: smtp-params.c:smtp_char_is_atext Unexecuted instantiation: smtp-reply-parser.c:smtp_char_is_atext Unexecuted instantiation: smtp-command-parser.c:smtp_char_is_atext Unexecuted instantiation: smtp-server-cmd-mail.c:smtp_char_is_atext Unexecuted instantiation: smtp-server-cmd-rcpt.c:smtp_char_is_atext smtp-parser.c:smtp_char_is_atext Line | Count | Source | 25 | 11.3k | smtp_char_is_atext(unsigned char ch) { | 26 | 11.3k | return (smtp_char_lookup[ch] & smtp_atext_char_mask) != 0; | 27 | 11.3k | } |
|
28 | | static inline bool |
29 | 61.2k | smtp_char_is_dcontent(unsigned char ch) { |
30 | 61.2k | return (smtp_char_lookup[ch] & smtp_dcontent_char_mask) != 0; |
31 | 61.2k | } Unexecuted instantiation: smtp-syntax.c:smtp_char_is_dcontent Unexecuted instantiation: smtp-address.c:smtp_char_is_dcontent Unexecuted instantiation: smtp-params.c:smtp_char_is_dcontent Unexecuted instantiation: smtp-reply-parser.c:smtp_char_is_dcontent Unexecuted instantiation: smtp-command-parser.c:smtp_char_is_dcontent Unexecuted instantiation: smtp-server-cmd-mail.c:smtp_char_is_dcontent Unexecuted instantiation: smtp-server-cmd-rcpt.c:smtp_char_is_dcontent smtp-parser.c:smtp_char_is_dcontent Line | Count | Source | 29 | 61.2k | smtp_char_is_dcontent(unsigned char ch) { | 30 | 61.2k | return (smtp_char_lookup[ch] & smtp_dcontent_char_mask) != 0; | 31 | 61.2k | } |
|
32 | | static inline bool |
33 | 784k | smtp_char_is_qtext(unsigned char ch) { |
34 | 784k | return (smtp_char_lookup[ch] & smtp_qtext_char_mask) != 0; |
35 | 784k | } Unexecuted instantiation: smtp-syntax.c:smtp_char_is_qtext smtp-address.c:smtp_char_is_qtext Line | Count | Source | 33 | 55.8k | smtp_char_is_qtext(unsigned char ch) { | 34 | 55.8k | return (smtp_char_lookup[ch] & smtp_qtext_char_mask) != 0; | 35 | 55.8k | } |
Unexecuted instantiation: smtp-params.c:smtp_char_is_qtext Unexecuted instantiation: smtp-reply-parser.c:smtp_char_is_qtext Unexecuted instantiation: smtp-command-parser.c:smtp_char_is_qtext Unexecuted instantiation: smtp-server-cmd-mail.c:smtp_char_is_qtext Unexecuted instantiation: smtp-server-cmd-rcpt.c:smtp_char_is_qtext smtp-parser.c:smtp_char_is_qtext Line | Count | Source | 33 | 728k | smtp_char_is_qtext(unsigned char ch) { | 34 | 728k | return (smtp_char_lookup[ch] & smtp_qtext_char_mask) != 0; | 35 | 728k | } |
|
36 | | static inline bool |
37 | 6.95M | smtp_char_is_textstr(unsigned char ch) { |
38 | 6.95M | return (smtp_char_lookup[ch] & smtp_textstr_char_mask) != 0; |
39 | 6.95M | } Unexecuted instantiation: smtp-syntax.c:smtp_char_is_textstr Unexecuted instantiation: smtp-address.c:smtp_char_is_textstr Unexecuted instantiation: smtp-params.c:smtp_char_is_textstr Unexecuted instantiation: smtp-reply-parser.c:smtp_char_is_textstr smtp-command-parser.c:smtp_char_is_textstr Line | Count | Source | 37 | 6.95M | smtp_char_is_textstr(unsigned char ch) { | 38 | 6.95M | return (smtp_char_lookup[ch] & smtp_textstr_char_mask) != 0; | 39 | 6.95M | } |
Unexecuted instantiation: smtp-server-cmd-mail.c:smtp_char_is_textstr Unexecuted instantiation: smtp-server-cmd-rcpt.c:smtp_char_is_textstr Unexecuted instantiation: smtp-parser.c:smtp_char_is_textstr |
40 | | static inline bool |
41 | 15.6k | smtp_char_is_esmtp_value(unsigned char ch) { |
42 | 15.6k | return (smtp_char_lookup[ch] & smtp_esmtp_value_char_mask) != 0; |
43 | 15.6k | } Unexecuted instantiation: smtp-syntax.c:smtp_char_is_esmtp_value Unexecuted instantiation: smtp-address.c:smtp_char_is_esmtp_value smtp-params.c:smtp_char_is_esmtp_value Line | Count | Source | 41 | 15.6k | smtp_char_is_esmtp_value(unsigned char ch) { | 42 | 15.6k | return (smtp_char_lookup[ch] & smtp_esmtp_value_char_mask) != 0; | 43 | 15.6k | } |
Unexecuted instantiation: smtp-reply-parser.c:smtp_char_is_esmtp_value Unexecuted instantiation: smtp-command-parser.c:smtp_char_is_esmtp_value Unexecuted instantiation: smtp-server-cmd-mail.c:smtp_char_is_esmtp_value Unexecuted instantiation: smtp-server-cmd-rcpt.c:smtp_char_is_esmtp_value Unexecuted instantiation: smtp-parser.c:smtp_char_is_esmtp_value |
44 | | static inline bool |
45 | 0 | smtp_char_is_ehlo_param(unsigned char ch) { |
46 | 0 | return (smtp_char_lookup[ch] & smtp_ehlo_param_char_mask) != 0; |
47 | 0 | } Unexecuted instantiation: smtp-syntax.c:smtp_char_is_ehlo_param Unexecuted instantiation: smtp-address.c:smtp_char_is_ehlo_param Unexecuted instantiation: smtp-params.c:smtp_char_is_ehlo_param Unexecuted instantiation: smtp-reply-parser.c:smtp_char_is_ehlo_param Unexecuted instantiation: smtp-command-parser.c:smtp_char_is_ehlo_param Unexecuted instantiation: smtp-server-cmd-mail.c:smtp_char_is_ehlo_param Unexecuted instantiation: smtp-server-cmd-rcpt.c:smtp_char_is_ehlo_param Unexecuted instantiation: smtp-parser.c:smtp_char_is_ehlo_param |
48 | | static inline bool |
49 | 0 | smtp_char_is_ehlo_greet(unsigned char ch) { |
50 | 0 | return (smtp_char_lookup[ch] & smtp_ehlo_greet_char_mask) != 0; |
51 | 0 | } Unexecuted instantiation: smtp-syntax.c:smtp_char_is_ehlo_greet Unexecuted instantiation: smtp-address.c:smtp_char_is_ehlo_greet Unexecuted instantiation: smtp-params.c:smtp_char_is_ehlo_greet Unexecuted instantiation: smtp-reply-parser.c:smtp_char_is_ehlo_greet Unexecuted instantiation: smtp-command-parser.c:smtp_char_is_ehlo_greet Unexecuted instantiation: smtp-server-cmd-mail.c:smtp_char_is_ehlo_greet Unexecuted instantiation: smtp-server-cmd-rcpt.c:smtp_char_is_ehlo_greet Unexecuted instantiation: smtp-parser.c:smtp_char_is_ehlo_greet |
52 | | static inline bool |
53 | 58.3k | smtp_char_is_qpair(unsigned char ch) { |
54 | 58.3k | return (smtp_char_lookup[ch] & smtp_qpair_char_mask) != 0; |
55 | 58.3k | } Unexecuted instantiation: smtp-syntax.c:smtp_char_is_qpair smtp-address.c:smtp_char_is_qpair Line | Count | Source | 53 | 55.8k | smtp_char_is_qpair(unsigned char ch) { | 54 | 55.8k | return (smtp_char_lookup[ch] & smtp_qpair_char_mask) != 0; | 55 | 55.8k | } |
Unexecuted instantiation: smtp-params.c:smtp_char_is_qpair Unexecuted instantiation: smtp-reply-parser.c:smtp_char_is_qpair Unexecuted instantiation: smtp-command-parser.c:smtp_char_is_qpair Unexecuted instantiation: smtp-server-cmd-mail.c:smtp_char_is_qpair Unexecuted instantiation: smtp-server-cmd-rcpt.c:smtp_char_is_qpair smtp-parser.c:smtp_char_is_qpair Line | Count | Source | 53 | 2.49k | smtp_char_is_qpair(unsigned char ch) { | 54 | 2.49k | return (smtp_char_lookup[ch] & smtp_qpair_char_mask) != 0; | 55 | 2.49k | } |
|
56 | | |
57 | | /* |
58 | | * SMTP parser |
59 | | */ |
60 | | |
61 | | struct smtp_parser { |
62 | | pool_t pool; |
63 | | const char *error; |
64 | | |
65 | | const unsigned char *begin, *cur, *end; |
66 | | }; |
67 | | |
68 | | void smtp_parser_init(struct smtp_parser *parser, |
69 | | pool_t pool, const char *data); |
70 | | string_t *smtp_parser_get_tmpbuf(struct smtp_parser *parser, size_t size); |
71 | | |
72 | | /* |
73 | | * Common syntax |
74 | | */ |
75 | | |
76 | | int smtp_parser_parse_domain(struct smtp_parser *parser, |
77 | | const char **value_r); |
78 | | int smtp_parser_parse_address_literal(struct smtp_parser *parser, |
79 | | const char **value_r, struct ip_addr *ip_r); |
80 | | int smtp_parser_parse_atom(struct smtp_parser *parser, |
81 | | const char **value_r); |
82 | | int smtp_parser_parse_quoted_string(struct smtp_parser *parser, |
83 | | const char **value_r); |
84 | | int smtp_parser_parse_string(struct smtp_parser *parser, |
85 | | const char **value_r); |
86 | | int smtp_parser_parse_xtext(struct smtp_parser *parser, |
87 | | string_t *out); |
88 | | |
89 | | #endif |