From: Timo Sirainen Date: Tue, 27 Dec 2022 09:59:33 +0000 (-0500) Subject: lib-mail: istream-header-filter - Call callbacks in their own data stack frames X-Git-Tag: 2.4.0~3231 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4196209b4d556d100fbc0a2a9c993bc9f89b877f;p=thirdparty%2Fdovecot%2Fcore.git lib-mail: istream-header-filter - Call callbacks in their own data stack frames This makes sure the data stack memory usage won't grow too much while parsing a large number of headers. --- diff --git a/src/lib-mail/istream-header-filter.c b/src/lib-mail/istream-header-filter.c index 83a73b028e..168242dbd5 100644 --- a/src/lib-mail/istream-header-filter.c +++ b/src/lib-mail/istream-header-filter.c @@ -235,11 +235,11 @@ static ssize_t read_header(struct header_filter_istream *mstream) if (mstream->header_parsed && !mstream->headers_edited) { if (mstream->eoh_not_matched) matched = !matched; - } else if (mstream->callback != NULL) { + } else if (mstream->callback != NULL) T_BEGIN { mstream->callback(mstream, hdr, &matched, mstream->context); mstream->callbacks_called = TRUE; - } + } T_END; if (matched) { mstream->eoh_not_matched = TRUE; @@ -274,8 +274,10 @@ static ssize_t read_header(struct header_filter_istream *mstream) bool orig_matched = matched; mstream->parsed_lines = mstream->cur_line; - mstream->callback(mstream, hdr, &matched, - mstream->context); + T_BEGIN { + mstream->callback(mstream, hdr, &matched, + mstream->context); + } T_END; mstream->callbacks_called = TRUE; if (matched != orig_matched && !hdr->continued && !mstream->headers_edited) {