Coverage Report

Created: 2026-04-12 06:50

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/dovecot/src/lib-smtp/smtp-parser.h
Line
Count
Source
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.80M
smtp_char_is_atext(unsigned char ch) {
26
2.80M
  return (smtp_char_lookup[ch] & smtp_atext_char_mask) != 0;
27
2.80M
}
Unexecuted instantiation: smtp-syntax.c:smtp_char_is_atext
smtp-address.c:smtp_char_is_atext
Line
Count
Source
25
2.78M
smtp_char_is_atext(unsigned char ch) {
26
2.78M
  return (smtp_char_lookup[ch] & smtp_atext_char_mask) != 0;
27
2.78M
}
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
14.0k
smtp_char_is_atext(unsigned char ch) {
26
14.0k
  return (smtp_char_lookup[ch] & smtp_atext_char_mask) != 0;
27
14.0k
}
28
static inline bool
29
70.1k
smtp_char_is_dcontent(unsigned char ch) {
30
70.1k
  return (smtp_char_lookup[ch] & smtp_dcontent_char_mask) != 0;
31
70.1k
}
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
70.1k
smtp_char_is_dcontent(unsigned char ch) {
30
70.1k
  return (smtp_char_lookup[ch] & smtp_dcontent_char_mask) != 0;
31
70.1k
}
32
static inline bool
33
985k
smtp_char_is_qtext(unsigned char ch) {
34
985k
  return (smtp_char_lookup[ch] & smtp_qtext_char_mask) != 0;
35
985k
}
Unexecuted instantiation: smtp-syntax.c:smtp_char_is_qtext
smtp-address.c:smtp_char_is_qtext
Line
Count
Source
33
70.3k
smtp_char_is_qtext(unsigned char ch) {
34
70.3k
  return (smtp_char_lookup[ch] & smtp_qtext_char_mask) != 0;
35
70.3k
}
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
915k
smtp_char_is_qtext(unsigned char ch) {
34
915k
  return (smtp_char_lookup[ch] & smtp_qtext_char_mask) != 0;
35
915k
}
36
static inline bool
37
7.42M
smtp_char_is_textstr(unsigned char ch) {
38
7.42M
  return (smtp_char_lookup[ch] & smtp_textstr_char_mask) != 0;
39
7.42M
}
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
7.42M
smtp_char_is_textstr(unsigned char ch) {
38
7.42M
  return (smtp_char_lookup[ch] & smtp_textstr_char_mask) != 0;
39
7.42M
}
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
18.1k
smtp_char_is_esmtp_value(unsigned char ch) {
42
18.1k
  return (smtp_char_lookup[ch] & smtp_esmtp_value_char_mask) != 0;
43
18.1k
}
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
18.1k
smtp_char_is_esmtp_value(unsigned char ch) {
42
18.1k
  return (smtp_char_lookup[ch] & smtp_esmtp_value_char_mask) != 0;
43
18.1k
}
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
73.0k
smtp_char_is_qpair(unsigned char ch) {
54
73.0k
  return (smtp_char_lookup[ch] & smtp_qpair_char_mask) != 0;
55
73.0k
}
Unexecuted instantiation: smtp-syntax.c:smtp_char_is_qpair
smtp-address.c:smtp_char_is_qpair
Line
Count
Source
53
70.3k
smtp_char_is_qpair(unsigned char ch) {
54
70.3k
  return (smtp_char_lookup[ch] & smtp_qpair_char_mask) != 0;
55
70.3k
}
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.73k
smtp_char_is_qpair(unsigned char ch) {
54
2.73k
  return (smtp_char_lookup[ch] & smtp_qpair_char_mask) != 0;
55
2.73k
}
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