Fixed
- SPF: concatenate TXT character-strings without removing literal quotes or
backslashes before selecting records, so a split within or immediately after
v=spf1is accepted in top-level,include:, andredirect=lookups as
required by RFC 7208 section 3.3 (#286) - DNS: escape literal quotes and backslashes in quoted TXT output so payload
characters remain distinct from string boundaries (RFC 1035 section 5.1) - DNS: preserve UTF-8 sequences split across TXT byte boundaries, retaining
the original string lengths for SPF size warnings (RFC 1035 section 3.3) - DNS: escape linefeeds in quoted TXT output so dnspython can parse it back
into the original byte strings - SPF: decode non-digit DNS escapes in quoted input to
parse_spf_record()
so escaped mechanism names and values can be assessed (RFC 1035 section 5.1) - SPF: accept surrounding spaces, tabs, and line endings in quoted parser
input without stripping payload whitespace or discarding Unicode and control
characters between quoted strings