=================================================================== RCS file: /cvs/mandoc/cgi.c,v retrieving revision 1.94 retrieving revision 1.95 diff -u -p -r1.94 -r1.95 --- mandoc/cgi.c 2014/08/17 03:24:47 1.94 +++ mandoc/cgi.c 2014/08/21 16:05:21 1.95 @@ -1,4 +1,4 @@ -/* $Id: cgi.c,v 1.94 2014/08/17 03:24:47 schwarze Exp $ */ +/* $Id: cgi.c,v 1.95 2014/08/21 16:05:21 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Kristaps Dzonsons * Copyright (c) 2014 Ingo Schwarze @@ -18,6 +18,7 @@ #include "config.h" #include +#include #include #include @@ -1029,9 +1030,22 @@ int main(void) { struct req req; + struct itimerval itimer; const char *path; const char *querystring; int i; + + /* Poor man's ReDoS mitigation. */ + + itimer.it_value.tv_sec = 1; + itimer.it_value.tv_usec = 0; + itimer.it_interval.tv_sec = 1; + itimer.it_interval.tv_usec = 0; + if (setitimer(ITIMER_VIRTUAL, &itimer, NULL) == -1) { + fprintf(stderr, "setitimer: %s\n", strerror(errno)); + pg_error_internal(); + return(EXIT_FAILURE); + } /* Scan our run-time environment. */