Sanitize emails after retrieving the from archive by adding proper CRLF line termination

Signed-off-by: Janos SUTO <sj@acts.hu>
This commit is contained in:
Janos SUTO 2023-05-28 18:53:28 +02:00
parent 0dfccc1473
commit 230ee7302f
2 changed files with 8 additions and 10 deletions

View File

@ -40,6 +40,12 @@ class ModelSearchMessage extends Model {
} }
private function normalize_message($data = '') {
$a = preg_split("/\r?\n/", $data);
return implode("\r\n", $a);
}
public function get_raw_message($id = '') { public function get_raw_message($id = '') {
$s = ''; $s = '';
@ -65,6 +71,8 @@ class ModelSearchMessage extends Model {
$this->verification = $this->verify_message($id, $s); $this->verification = $this->verify_message($id, $s);
} }
$s = $this->normalize_message($s);
if(Registry::get('auditor_user') == 0 && HEADER_LINE_TO_HIDE) { if(Registry::get('auditor_user') == 0 && HEADER_LINE_TO_HIDE) {
$s = preg_replace("/" . HEADER_LINE_TO_HIDE . ".{1,}(\n(\ |\t){1,}.{1,}){0,}" . "\n/i", "", $s); $s = preg_replace("/" . HEADER_LINE_TO_HIDE . ".{1,}(\n(\ |\t){1,}.{1,}){0,}" . "\n/i", "", $s);
} }

View File

@ -144,22 +144,12 @@ class Piler_Mime_Decode {
public static function removeJournal(&$message, $EOL = "\n") { public static function removeJournal(&$message, $EOL = "\n") {
$has_journal = 0; $has_journal = 0;
$crlfs = substr_count($message, "\r\n");
self::splitMessageRaw($message, $headers, $journal, $body); self::splitMessageRaw($message, $headers, $journal, $body);
if($journal) { if($journal) {
$has_journal = 1; $has_journal = 1;
} }
// If the message has >10 CRLF sequences, then we assume
// that we need to restore the removed LF characters
if($crlfs > 10) {
$headers = str_replace("\n", "\r\n", $headers);
$body = str_replace("\n", "\r\n", $body);
$EOL = "\r\n";
}
$message = $headers . $EOL . $EOL . $body; $message = $headers . $EOL . $EOL . $body;
return $has_journal; return $has_journal;