Remove 0-bytes from headers before processing
This commit is contained in:
@@ -12,7 +12,11 @@
|
|||||||
# along with PyHeader-Milter. If not, see <http://www.gnu.org/licenses/>.
|
# along with PyHeader-Milter. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
|
|
||||||
__all__ = ["HeaderRule", "HeaderMilter"]
|
__all__ = [
|
||||||
|
"make_header",
|
||||||
|
"replace_illegal_chars",
|
||||||
|
"HeaderRule",
|
||||||
|
"HeaderMilter"]
|
||||||
|
|
||||||
import Milter
|
import Milter
|
||||||
import argparse
|
import argparse
|
||||||
@@ -50,6 +54,13 @@ def make_header(decoded_seq, maxlinelen=None, header_name=None,
|
|||||||
return h
|
return h
|
||||||
|
|
||||||
|
|
||||||
|
def replace_illegal_chars(string):
|
||||||
|
return string.replace(
|
||||||
|
"\x00", "").replace(
|
||||||
|
"\r", "").replace(
|
||||||
|
"\n", "")
|
||||||
|
|
||||||
|
|
||||||
class HeaderRule:
|
class HeaderRule:
|
||||||
"""HeaderRule to implement a rule to apply on e-mail headers."""
|
"""HeaderRule to implement a rule to apply on e-mail headers."""
|
||||||
|
|
||||||
@@ -238,7 +249,8 @@ class HeaderMilter(Milter.Base):
|
|||||||
value = value.encode(
|
value = value.encode(
|
||||||
errors="surrogateescape").decode(errors="replace")
|
errors="surrogateescape").decode(errors="replace")
|
||||||
self.logger.debug(f"{self.qid}: received header: {name}: {value}")
|
self.logger.debug(f"{self.qid}: received header: {name}: {value}")
|
||||||
value = str(make_header(decode_header(value), errors="replace"))
|
header = make_header(decode_header(value), errors="replace")
|
||||||
|
value = str(header).replace("\x00", "")
|
||||||
self.logger.debug(
|
self.logger.debug(
|
||||||
f"{self.qid}: decoded header: {name}: {value}")
|
f"{self.qid}: decoded header: {name}: {value}")
|
||||||
self.headers.append((name, value))
|
self.headers.append((name, value))
|
||||||
@@ -255,7 +267,8 @@ class HeaderMilter(Milter.Base):
|
|||||||
modified = rule.execute(self.headers)
|
modified = rule.execute(self.headers)
|
||||||
for name, value, index, occurrence in modified:
|
for name, value, index, occurrence in modified:
|
||||||
header = f"{name}: {value}"
|
header = f"{name}: {value}"
|
||||||
enc_value = Header(s=value).encode()
|
enc_value = replace_illegal_chars(
|
||||||
|
Header(s=value).encode())
|
||||||
if rule.action == "add":
|
if rule.action == "add":
|
||||||
if rule.log:
|
if rule.log:
|
||||||
self.logger.info(
|
self.logger.info(
|
||||||
|
|||||||
Reference in New Issue
Block a user