From 8ef8ebcf522a1fcfacc2601f9db3f97a55a3ddfd Mon Sep 17 00:00:00 2001 From: Ingo Schwarze Date: Tue, 7 Mar 2017 20:00:08 +0000 Subject: If a user-defined macro is aborted because it exceeds the stack limit, usually due to infinite recursion, discard whatever remains in all those open stack levels. Otherwise, insane constructions like the following could generate macros of enormous size, causing mandoc(1) to die from memory exhaustion: .de m \" original macro definition .m \" recursion to blow up the stack .de m \" definition to be run during the call of .m marked (*) very long plain text (some kilobytes) .m \" expand the above a thousand times while unwinding the stack .. \" end of the original definition .m \" (*) recursively generate a ridiculously large macro .. \" end of recursively generated definition .m \" execute the giant macro, exhausting memory Very creative abuse found by tb@ with afl(1). --- regress/roff/de/infinite.out_lint | 1 + 1 file changed, 1 insertion(+) create mode 100644 regress/roff/de/infinite.out_lint (limited to 'regress/roff/de/infinite.out_lint') diff --git a/regress/roff/de/infinite.out_lint b/regress/roff/de/infinite.out_lint new file mode 100644 index 00000000..168c7be4 --- /dev/null +++ b/regress/roff/de/infinite.out_lint @@ -0,0 +1 @@ +mandoc: infinite.in:13:5: ERROR: input stack limit exceeded, infinite loop? -- cgit v1.2.3-56-ge451