You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by Alexei Kosut <ak...@hyperreal.com> on 1996/06/17 22:25:15 UTC
cvs commit: apache/src CHANGES mod_cgi.c
akosut 96/06/17 13:25:15
Modified: src CHANGES mod_cgi.c
Log:
"This is at least meant to make Apache behave a little more sensibly
when a script stops reading output early (or the pipe just gets
jammed). I believe this is the bug that Mark Weiser was raising hell
about at www5..."
Submitted by: Robert S. Thau
Revision Changes Path
1.31 +1 -0 apache/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /export/home/cvs/apache/src/CHANGES,v
retrieving revision 1.30
retrieving revision 1.31
diff -C3 -r1.30 -r1.31
*** CHANGES 1996/06/17 20:17:01 1.30
--- CHANGES 1996/06/17 20:25:12 1.31
***************
*** 19,24 ****
--- 19,25 ----
a) more mod_proxy bugs
b) early termination of inetd requests
c) compile warnings on several systems
+ d) problems when scripts stop reading output early
Changes with Apache 1.1b3:
1.9 +14 -1 apache/src/mod_cgi.c
Index: mod_cgi.c
===================================================================
RCS file: /export/home/cvs/apache/src/mod_cgi.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -C3 -r1.8 -r1.9
*** mod_cgi.c 1996/05/22 17:35:38 1.8
--- mod_cgi.c 1996/06/17 20:25:13 1.9
***************
*** 308,315 ****
len_read = read_client_block (r, argsbuffer, len_to_read);
if (len_read == 0)
break;
! fwrite (argsbuffer, 1, len_read, script_out);
remaining -= len_read;
}
fflush (script_out);
--- 308,328 ----
len_read = read_client_block (r, argsbuffer, len_to_read);
if (len_read == 0)
break;
! if (fwrite (argsbuffer, 1, len_read, script_out) == 0)
! break;
remaining -= len_read;
+ }
+
+ /* If script stopped reading early, soak up remaining stuff from
+ * client...
+ */
+
+ while (remaining > 0) {
+ int len_read, len_to_read = remaining;
+ if (len_to_read > HUGE_STRING_LEN) len_to_read = HUGE_STRING_LEN;
+
+ len_read = read_client_block (r, argsbuffer, len_to_read);
+ if (len_read == 0) break;
}
fflush (script_out);