From 05a7808366825fd9898f5c6ed68cee75b8f368e0 Mon Sep 17 00:00:00 2001 From: Dafan Zhai Date: Wed, 31 May 2023 16:11:42 +0200 Subject: [PATCH] Support obs-FWS in the FWS parser (#431) --- src/low-level/imf/mailimf.c | 38 +++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/src/low-level/imf/mailimf.c b/src/low-level/imf/mailimf.c index 1d766e8f..27b19de2 100644 --- a/src/low-level/imf/mailimf.c +++ b/src/low-level/imf/mailimf.c @@ -830,6 +830,7 @@ int mailimf_fws_parse(const char * message, size_t length, size_t * indx) int fws_1; int fws_2; int fws_3; + int fws_4; int r; cur_token = * indx; @@ -847,20 +848,24 @@ int mailimf_fws_parse(const char * message, size_t length, size_t * indx) } final_token = cur_token; - r = mailimf_crlf_parse(message, length, &cur_token); - switch (r) { - case MAILIMF_NO_ERROR: - fws_2 = TRUE; - break; - case MAILIMF_ERROR_PARSE: - fws_2 = FALSE; - break; - default: - return r; - } - fws_3 = FALSE; - if (fws_2) { + fws_4 = FALSE; + while (1) { + r = mailimf_crlf_parse(message, length, &cur_token); + switch (r) { + case MAILIMF_NO_ERROR: + fws_2 = TRUE; + break; + case MAILIMF_ERROR_PARSE: + fws_2 = FALSE; + break; + default: + return r; + } + if (!fws_2) + break; + + fws_4 = FALSE; while (1) { r = mailimf_wsp_parse(message, length, &cur_token); if (r != MAILIMF_NO_ERROR) { @@ -869,14 +874,19 @@ int mailimf_fws_parse(const char * message, size_t length, size_t * indx) else return r; } + final_token = cur_token; fws_3 = TRUE; + fws_4 = TRUE; } + + if (!fws_4) + break; } if ((!fws_1) && (!fws_3)) return MAILIMF_ERROR_PARSE; - if (!fws_3) + if (!fws_4) cur_token = final_token; * indx = cur_token;