From: Jeremy Harris Date: Thu, 18 Feb 2021 21:17:40 +0000 (+0000) Subject: Debugging: avoid expansion problem with foolish-length list output X-Git-Tag: exim-4.95-RC0~128 X-Git-Url: https://git.exim.org/exim.git/commitdiff_plain/0cd6e20a16a80f3f4c868a5161fc630523381ae6?ds=sidebyside Debugging: avoid expansion problem with foolish-length list output --- diff --git a/src/src/match.c b/src/src/match.c index 42145e98e..5f6c1fb01 100644 --- a/src/src/match.c +++ b/src/src/match.c @@ -498,8 +498,18 @@ else } /* For an unnamed list, use the expanded version in comments */ +#define LIST_LIMIT_PR 2048 -HDEBUG(D_any) if (!ot) ot = string_sprintf("%s in \"%s\"?", name, list); +HDEBUG(D_any) if (!ot) + { + int n, m; + gstring * g = string_fmt_append(NULL, "%s in \"%n%.*s%n\"", + name, &n, LIST_LIMIT_PR, list, &m); + if (m - n >= LIST_LIMIT_PR) g = string_catn(g, US"...", 3); + g = string_catn(g, US"?", 1); + gstring_release_unused(g); + ot = string_from_gstring(g); + } /* Now scan the list and process each item in turn, until one of them matches, or we hit an error. */ @@ -705,7 +715,7 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0))) if ((bits & (-bits)) == bits) /* Only one of the two bits is set */ { HDEBUG(D_lists) debug_printf("%s %s (matched \"%s\"%s)\n", ot, - (yield == OK)? "yes" : "no", sss, cached); + yield == OK ? "yes" : "no", sss, cached); return yield; } }