pier 01/07/18 21:24:15 Modified: webapp/lib pr_warp_network.c Log: Fixed bug preventing to read a zero-length WARP packet. Revision Changes Path 1.3 +18 -11 jakarta-tomcat-connectors/webapp/lib/pr_warp_network.c Index: pr_warp_network.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/webapp/lib/pr_warp_network.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- pr_warp_network.c 2001/07/18 19:12:38 1.2 +++ pr_warp_network.c 2001/07/19 04:24:15 1.3 @@ -54,7 +54,7 @@ * * * ========================================================================= */ -/* @version $Id: pr_warp_network.c,v 1.2 2001/07/18 19:12:38 pier Exp $ */ +/* @version $Id: pr_warp_network.c,v 1.3 2001/07/19 04:24:15 pier Exp $ */ #include "pr_warp.h" wa_boolean n_recv(apr_socket_t *sock, warp_packet *pack) { @@ -68,7 +68,10 @@ p_reset(pack); len=3; while(1) { - if (apr_recv(sock,&hdr[ptr],&len)!=APR_SUCCESS) return(wa_false); + if (apr_recv(sock,&hdr[ptr],&len)!=APR_SUCCESS) { + wa_debug(WA_MARK,"Cannot receive header"); + return(wa_false); + } ptr+=len; len=3-ptr; if (len==0) break; @@ -77,16 +80,20 @@ pack->size=(hdr[1]&0x0ff)<<8; pack->size=pack->size|(hdr[2]&0x0ff); - len=pack->size; - ptr=0; - while(1) { - if (apr_recv(sock,&pack->buff[ptr],&len)!=APR_SUCCESS) - return(wa_false); - ptr+=len; - len=pack->size-ptr; - if (len==0) break; + if (pack->size>0) { + len=pack->size; + ptr=0; + while(1) { + if (apr_recv(sock,&pack->buff[ptr],&len)!=APR_SUCCESS) { + wa_debug(WA_MARK,"Cannot receive payload"); + return(wa_false); + } + ptr+=len; + len=pack->size-ptr; + if (len==0) break; + } } - + wa_debug(WA_MARK,"WARP <<< TYP=%d LEN=%d",pack->type,pack->size); return(wa_true);