Is this a DoS risk - code that sends your build chain into an infinite loop?
From a DoS risk perspective there is no practical difference between an infinite loop, or a finite but arbitrarily large loop, which was always possible. For example, this doesn't work: #define DOUBLE(x) DOUBLE(x) DOUBLE(x) DOUBLE(x) That would only expand once and then stop because of the rule against repeated expansion. But nothing prevents you from unrolling the first few recursive expansions, e.g.: #define DOUBLE…
$ cc -E - #define A(x) x x x x x x
> #define B(x) A(x) A(x) A(x) A(x)
> #define C(x) B(x) B(x) B(x) B(x)
> C(Noooooo)
> .