X-Git-Url: http://www.dolda2000.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Freq.c;h=da8e3f0d8ffb463082a314762f4e1635bc2bc809;hb=90b0ba0f9d93e454cc08a566b718abdcbfd0d9f6;hp=64944bf56b1c93a949526615faf01f4c14047144;hpb=608f4ac7a840277f9754d8fe0410a31727057d3f;p=ashd.git diff --git a/lib/req.c b/lib/req.c index 64944bf..da8e3f0 100644 --- a/lib/req.c +++ b/lib/req.c @@ -23,6 +23,7 @@ #include #include #include +#include #ifdef HAVE_CONFIG_H #include @@ -105,12 +106,16 @@ int parseheaders(struct hthead *head, FILE *in) { int c, state; struct charbuf name, val; + size_t tsz; bufinit(name); bufinit(val); state = 0; + tsz = 0; while(1) { c = fgetc(in); + if(++tsz >= 65536) + goto fail; again: if(state == 0) { if(c == '\r') { @@ -254,6 +259,7 @@ int recvreq(int sock, struct hthead **reqp) if((fd = recvfd(sock, &buf.b, &buf.d)) < 0) { return(-1); } + fcntl(fd, F_SETFD, FD_CLOEXEC); buf.s = buf.d; p = buf.b; l = buf.d;