From: Fredrik Tolf Date: Fri, 25 Apr 2014 15:33:22 +0000 (+0200) Subject: Merge branch 'master' of git.dolda2000.com:/srv/git/r/ashd X-Git-Url: http://www.dolda2000.com/gitweb/?p=ashd.git;a=commitdiff_plain;h=5de3363121322e0f307885499786ecdb451a8ec1;hp=3ae5664988dd86d1e780f5cc59a3c6f819f78264 Merge branch 'master' of git.dolda2000.com:/srv/git/r/ashd --- diff --git a/src/callfcgi.c b/src/callfcgi.c index e1d71f2..2b3717e 100644 --- a/src/callfcgi.c +++ b/src/callfcgi.c @@ -569,35 +569,26 @@ static int sendrec(FILE *out, int type, int rid, char *data, size_t dlen) return(0); } -#define fgetc2(f) ({int __c__ = fgetc(f); if(__c__ == EOF) return(-1); __c__;}) - static int recvrec(FILE *in, int *type, int *rid, char **data, size_t *dlen) { - int b1, b2, pl; + unsigned char header[8]; + int tl; - if(fgetc2(in) != 1) + if(fread(header, 1, 8, in) != 8) + return(-1); + if(header[0] != 1) return(-1); - *type = fgetc2(in); - b1 = fgetc2(in); - b2 = fgetc2(in); - *rid = (b1 << 8) | b2; - b1 = fgetc2(in); - b2 = fgetc2(in); - *dlen = (b1 << 8) | b2; - pl = fgetc2(in); - if(fgetc2(in) != 0) + *type = header[1]; + *rid = (header[2] << 8) | header[3]; + *dlen = (header[4] << 8) | header[5]; + tl = *dlen + header[6]; + if(header[7] != 0) return(-1); - *data = smalloc(max(*dlen, 1)); - if(fread(*data, 1, *dlen, in) != *dlen) { + *data = smalloc(max(tl, 1)); + if(fread(*data, 1, tl, in) != tl) { free(*data); return(-1); } - for(; pl > 0; pl--) { - if(fgetc(in) == EOF) { - free(*data); - return(-1); - } - } return(0); }