From 26b1c599379dec6148fb2b9145df534a7db5b0c2 Mon Sep 17 00:00:00 2001 From: Philippe Pittoli Date: Tue, 25 Jul 2023 15:32:42 +0200 Subject: [PATCH] Domain Parser: return the last point. --- src/DomainParser.purs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/DomainParser.purs b/src/DomainParser.purs index 75640e5..0c8ec43 100644 --- a/src/DomainParser.purs +++ b/src/DomainParser.purs @@ -34,11 +34,15 @@ domain = PC.try (string " ") <|> sub_eof sub_eof :: Parser String String sub_eof = do sub <- subdomain - PC.optional (char '.') + maybe_final_point <- PC.optionMaybe (char '.') eof - if S.length sub > 255 - then fail $ "domain length is > 255 bytes (" <> show (S.length sub) <> ")" - else pure sub + let parsed_domain = did_we_parsed_the_final_point maybe_final_point sub + if S.length parsed_domain > 255 + then fail $ "domain length is > 255 bytes (" <> show (S.length parsed_domain) <> ")" + else pure parsed_domain + where + did_we_parsed_the_final_point Nothing sub = sub + did_we_parsed_the_final_point (Just _) sub = sub <> "." -- From RFC 1035: ::=