From 7d66c47a0d5c5c1b0053409153db4a3750aa70d6 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Fri, 6 Jan 2023 13:44:32 -0500 Subject: [PATCH] Rename StrBufRFC2047encodeMessage() to StrBufQuotedPrintableEncode() --- citadel/server/modules/instmsg/serv_instmsg.c | 2 +- .../server/modules/rssclient/serv_rssclient.c | 15 +++--- libcitadel/lib/libcitadel.h | 2 +- libcitadel/lib/stringbuf.c | 51 ++++++------------- webcit/serv_func.c | 2 +- 5 files changed, 26 insertions(+), 46 deletions(-) diff --git a/citadel/server/modules/instmsg/serv_instmsg.c b/citadel/server/modules/instmsg/serv_instmsg.c index 978efef6d..6726e2355 100644 --- a/citadel/server/modules/instmsg/serv_instmsg.c +++ b/citadel/server/modules/instmsg/serv_instmsg.c @@ -428,7 +428,7 @@ void flush_individual_conversation(struct imlog *im) { ), 0 ); - MsgBuf = StrBufRFC2047encodeMessage(im->conversation); + MsgBuf = StrBufQuotedPrintableEncode(im->conversation); FlushStrBuf(im->conversation); FullMsgBuf = NewStrBufPlain(NULL, StrLength(im->conversation) + 100); diff --git a/citadel/server/modules/rssclient/serv_rssclient.c b/citadel/server/modules/rssclient/serv_rssclient.c index 66d0d13a0..4f4db62fc 100644 --- a/citadel/server/modules/rssclient/serv_rssclient.c +++ b/citadel/server/modules/rssclient/serv_rssclient.c @@ -126,37 +126,38 @@ void rss_end_element(void *data, const char *el) { if (already_seen == 0) { // Compose the message text + // FIXME ajc 2023jan06 - this can create lines longer than 1024 characters which chokes the client message parsers StrBuf *TheMessage = NewStrBuf(); StrBufAppendPrintf(TheMessage, "Content-type: text/html\n\n" "\n\n" "" ); - + if (r->description != NULL) { StrBufAppendPrintf(TheMessage, "%s

\r\n", r->description); free(r->description); r->description = NULL; } - + if (r->link != NULL) { StrBufAppendPrintf(TheMessage, "%s\r\n", r->link, r->link); free(r->link); r->link = NULL; } - + StrBufAppendPrintf(TheMessage, "\r\n"); CM_SetField(r->msg, eMesageText, ChrPtr(TheMessage), StrLength(TheMessage)); FreeStrBuf(&TheMessage); - + if (CM_IsEmpty(r->msg, eAuthor)) { CM_SetField(r->msg, eAuthor, HKEY("rss")); } - + if (CM_IsEmpty(r->msg, eTimestamp)) { CM_SetFieldLONG(r->msg, eTimestamp, time(NULL)); } - + // Save it to the room(s) struct rssroom *rr = NULL; long msgnum = (-1); @@ -173,7 +174,7 @@ void rss_end_element(void *data, const char *el) { else { syslog(LOG_DEBUG, "rssclient: already seen %s", r->item_id); } - + CM_Free(r->msg); r->msg = NULL; } diff --git a/libcitadel/lib/libcitadel.h b/libcitadel/lib/libcitadel.h index f309aa593..cb59c485c 100644 --- a/libcitadel/lib/libcitadel.h +++ b/libcitadel/lib/libcitadel.h @@ -320,7 +320,7 @@ int StrBufDecodeBase64(StrBuf *Buf); void StrBufDecodeQP(StrBuf *Buf); int StrBufDecodeBase64To(const StrBuf *BufIn, StrBuf *BufOut); int StrBufDecodeHex(StrBuf *Buf); -StrBuf *StrBufRFC2047encodeMessage(const StrBuf *EncodeMe); +StrBuf *StrBufQuotedPrintableEncode(const StrBuf *EncodeMe); int StrBufRFC2047encode(StrBuf **target, const StrBuf *source); StrBuf *StrBufSanitizeEmailRecipientVector(const StrBuf *Recp, StrBuf *UserName, diff --git a/libcitadel/lib/stringbuf.c b/libcitadel/lib/stringbuf.c index e4824cf36..d31c227c5 100644 --- a/libcitadel/lib/stringbuf.c +++ b/libcitadel/lib/stringbuf.c @@ -1,4 +1,4 @@ -// Copyright (c) 1987-2022 by the citadel.org team +// Copyright (c) 1987-2023 by the citadel.org team // // This program is open source software. Use, duplication, or disclosure // is subject to the terms of the GNU General Public License, version 3. @@ -33,8 +33,7 @@ #ifdef HAVE_ZLIB #include -int ZEXPORT compress_gzip(Bytef * dest, size_t * destLen, - const Bytef * source, uLong sourceLen, int level); +int ZEXPORT compress_gzip(Bytef * dest, size_t * destLen, const Bytef * source, uLong sourceLen, int level); #endif int BaseStrBufSize = 64; int EnableSplice = 0; @@ -3097,13 +3096,10 @@ int StrBufRFC2047encode(StrBuf **target, const StrBuf *source) return (*target)->BufUsed;; } -/** - * Quoted-Printable encode a message; make it < 80 columns width. - * source Source string to be encoded. - * @returns buffer with encoded message. - */ -StrBuf *StrBufRFC2047encodeMessage(const StrBuf *EncodeMe) -{ +// Quoted-Printable encode a message; make it < 80 columns width. +// source Source string to be encoded. +// returns buffer with encoded message. +StrBuf *StrBufQuotedPrintableEncode(const StrBuf *EncodeMe) { StrBuf *OutBuf; char *Optr, *OEptr; const char *ptr, *eptr; @@ -3117,10 +3113,8 @@ StrBuf *StrBufRFC2047encodeMessage(const StrBuf *EncodeMe) eptr = EncodeMe->buf + EncodeMe->BufUsed; LinePos = 0; - while (ptr < eptr) - { - if (Optr + 4 >= OEptr) - { + while (ptr < eptr) { + if (Optr + 4 >= OEptr) { long Offset; Offset = Optr - OutBuf->buf; OutBuf->BufUsed = Optr - OutBuf->buf; @@ -3128,21 +3122,16 @@ StrBuf *StrBufRFC2047encodeMessage(const StrBuf *EncodeMe) Optr = OutBuf->buf + Offset; OEptr = OutBuf->buf + OutBuf->BufSize; } - if (*ptr == '\r') - { - /* ignore carriage returns */ + if (*ptr == '\r') { // ignore carriage returns ptr ++; } - else if (*ptr == '\n') { - /* hard line break */ + else if (*ptr == '\n') { // hard line break memcpy(Optr, HKEY("=0A")); Optr += 3; LinePos += 3; ptr ++; } - else if (( (*ptr >= 32) && (*ptr <= 60) ) || - ( (*ptr >= 62) && (*ptr <= 126) )) - { + else if (( (*ptr >= 32) && (*ptr <= 60) ) || ( (*ptr >= 62) && (*ptr <= 126) )) { *Optr = *ptr; Optr ++; ptr ++; @@ -3160,8 +3149,7 @@ StrBuf *StrBufRFC2047encodeMessage(const StrBuf *EncodeMe) ptr ++; } - if (LinePos > 72) { - /* soft line break */ + if (LinePos > 72) { // soft line break if (isspace(*(Optr - 1))) { ch = *(Optr - 1); Optr --; @@ -3187,11 +3175,7 @@ StrBuf *StrBufRFC2047encodeMessage(const StrBuf *EncodeMe) } -static void AddRecipient(StrBuf *Target, - StrBuf *UserName, - StrBuf *EmailAddress, - StrBuf *EncBuf) -{ +static void AddRecipient(StrBuf *Target, StrBuf *UserName, StrBuf *EmailAddress, StrBuf *EncBuf) { int QuoteMe = 0; if (StrLength(Target) > 0) StrBufAppendBufPlain(Target, HKEY(", "), 0); @@ -3219,11 +3203,7 @@ static void AddRecipient(StrBuf *Target, * \param EncBuf Temporary buffer for internal use; Please provide valid buffer. * \returns encoded & sanitized buffer with the contents of Recp; Caller owns this memory. */ -StrBuf *StrBufSanitizeEmailRecipientVector(const StrBuf *Recp, - StrBuf *UserName, - StrBuf *EmailAddress, - StrBuf *EncBuf) -{ +StrBuf *StrBufSanitizeEmailRecipientVector(const StrBuf *Recp, StrBuf *UserName, StrBuf *EmailAddress, StrBuf *EncBuf) { StrBuf *Target; const char *pch, *pche; const char *UserStart, *UserEnd, *EmailStart, *EmailEnd, *At; @@ -3362,8 +3342,7 @@ StrBuf *StrBufSanitizeEmailRecipientVector(const StrBuf *Recp, * search character to search * replace character to replace search by */ -void StrBufReplaceChars(StrBuf *buf, char search, char replace) -{ +void StrBufReplaceChars(StrBuf *buf, char search, char replace) { long i; if (buf == NULL) return; diff --git a/webcit/serv_func.c b/webcit/serv_func.c index 88af2024f..02e687946 100644 --- a/webcit/serv_func.c +++ b/webcit/serv_func.c @@ -380,7 +380,7 @@ void text_to_server(char *ptr) { void text_to_server_qp(const StrBuf *SendMeEncoded) { StrBuf *ServBuf; - ServBuf = StrBufRFC2047encodeMessage(SendMeEncoded); + ServBuf = StrBufQuotedPrintableEncode(SendMeEncoded); serv_putbuf(ServBuf); FreeStrBuf(&ServBuf); } -- 2.30.2