From 85d9dd1545499e59e48ae8b85f4a97b82ecc451d Mon Sep 17 00:00:00 2001 From: Deon George Date: Fri, 27 Aug 2021 23:16:39 +1000 Subject: [PATCH] Catch Exception when interpretting date, Create MSGID if it doesnt exist, Fix when \r\n is used in messages. --- app/Classes/FTN/Message.php | 11 +++++++++-- app/Classes/FTN/Packet.php | 11 ++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/app/Classes/FTN/Message.php b/app/Classes/FTN/Message.php index c9dec33..2839541 100644 --- a/app/Classes/FTN/Message.php +++ b/app/Classes/FTN/Message.php @@ -307,8 +307,14 @@ class Message extends FTNBase return Address::findFTN($this->tboss); case 'date': - return Carbon::createFromFormat('d M y H:i:s O', - sprintf('%s %s%04d',chop(Arr::get($this->header,$key)),($this->tzutc < 0) ? '-' : '+',abs($this->tzutc))); + try { + return Carbon::createFromFormat('d M y H:i:s O', + sprintf('%s %s%04d',chop(Arr::get($this->header,$key)),($this->tzutc < 0) ? '-' : '+',abs($this->tzutc))); + + } catch (\Exception $e) { + Log::error(sprintf('%s: ! Date doesnt parse [%s] (%s)',self::LOGKEY,$e->getMessage(),Arr::get($this->header,$key))); + return NULL; + } case 'flags': case 'cost': @@ -651,6 +657,7 @@ class Message extends FTNBase { // Remove DOS \n\r $message = preg_replace("/\n\r/","\r",$message); + $message = preg_replace("/\r\n/","\r",$message); // Split out the lines $result = collect(explode("\x01",$message))->filter(); diff --git a/app/Classes/FTN/Packet.php b/app/Classes/FTN/Packet.php index 9705b6e..30fe157 100644 --- a/app/Classes/FTN/Packet.php +++ b/app/Classes/FTN/Packet.php @@ -421,13 +421,18 @@ class Packet extends FTNBase implements \Iterator, \Countable $msg = Message::parseMessage($message,$domain); // If the message is invalid, we'll ignore it - if ($msg->errors && $msg->errors->messages()->has('from')) { + if ($msg->errors && ( + $msg->errors->messages()->has('from') + || $msg->errors->messages()->has('user_from') + || $msg->errors->messages()->has('user_to') + )) + { $this->errors->push($msg); - Log::error(sprintf('%s:! %s Skipping...',self::LOGKEY,join('|',$msg->errors->messages()->get('from')))); + Log::error(sprintf('%s:! Skipping message [%s] due to errors (%s)...',self::LOGKEY,$msg->msgid,join(',',$msg->errors->messages()->keys()))); } else { if ($this->use_redis) { - Redis::set($msg->msgid,serialize($msg)); + Redis::set($msg->msgid ?: sprintf('%s %s',$msg->fftn,Carbon::now()->timestamp),serialize($msg)); $this->messages->push($msg->msgid); } else {