Coverage Report

Created: 2025-07-11 06:59

/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