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);
  
  
  

Reply via email to