From e8ba9ee4276e81af84ecb6ff6f0c024ef99f6ddc Mon Sep 17 00:00:00 2001 From: Vishnu Sudhakaran Date: Wed, 28 Jul 2021 03:45:38 +0530 Subject: [PATCH] fix(smtp_server): updated line split logic, normalize all linebreaks to \r\n (#897) Co-authored-by: Vishnu S --- lib/postal/smtp_server/server.rb | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/postal/smtp_server/server.rb b/lib/postal/smtp_server/server.rb index 301f133..2e4bf9c 100644 --- a/lib/postal/smtp_server/server.rb +++ b/lib/postal/smtp_server/server.rb @@ -147,15 +147,16 @@ module Postal # Client went away eof = true end + + # Normalize all \r\n and \n to \r\n + buffers[io] = buffers[io].encode(buffers[io].encoding, universal_newline: true).encode(buffers[io].encoding, crlf_newline: true) + # We line buffer, so look to see if we have received a newline # and keep doing so until all buffered lines have been processed. - while buffers[io].index("\n") + while buffers[io].index("\r\n") # Extract the line - if buffers[io].index("\r\n") - line, buffers[io] = buffers[io].split("\r\n", 2) - else - line, buffers[io] = buffers[io].split("\n", 2) - end + line, buffers[io] = buffers[io].split("\r\n", 2) + # Send the received line to the client object for processing result = client.handle(line) # If the client object returned some data, write it back to the client