Bug in the inet driver's http mode

Per Hedeland hedeland@REDACTED
Tue Jan 3 16:14:27 CET 2006


This is one of those cases where *I* would say "No, that can't be -
check your own code!" - but it seems I found a bug with the
{packet, http} option. Of course this option isn't documented as
far as I know, but I would have expected any bugs to be beaten out
of it long ago anyway (e.g. yaws uses it, see below). But I guess
HTTP headers with multiple continuation lines aren't all that

Patch against R10B-9 below. I'm afraid I don't have a simple
reproduction case - I could probably create one if absolutely
necessary, but the bug is quite obvious from code inspection.:-)
The symptom in our case was that yaws just hung in gen_tcp:recv/3
until Timeout when a http request had (among others) a header with
about a dozen continuation lines (total header length ~ 700 bytes).

--Per Hedeland

--- otp_src_R10B-9/erts/emulator/drivers/common/inet_drv.c.orig	Mon Dec 12 15:55:13 2005
+++ otp_src_R10B-9/erts/emulator/drivers/common/inet_drv.c	Tue Jan  3 15:13:45 2006
@@ -5542,7 +5542,7 @@
 		  if (plen < n) {
 		      if (SP(ptr2+1)) {
 			  ptr1 = ptr2+1;
-			  len -= plen;
+			  len = n - plen;
 			  goto done;

More information about the erlang-questions mailing list