Bugs item #1871269, was opened at 2008-01-14 11:44
Message generated for change (Comment added) made by jmalicki
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=100976&aid=1871269&group_id=976
Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: libcurl
Group: hang
Status: Open
Resolution: None
Priority: 7
Private: No
Submitted By: Joe Malicki (jmalicki)
Assigned to: Daniel Stenberg (bagder)
Summary: Curl hangs when sending large request-headers
Initial Comment:
Using libcurl 7.13.2, 7.15.5 or 7.17.1 with software that sends extremely large (> ~40KB, whatever is greater than one syscall) request-headers as part of a post. The following patch fixes it, passes regression tests the same as the old curl, and has made it through several months of QA integration in a larger project with no issues:
This patch is against 7.15.5, and works with patch "fuzz" against 7.13.2 as well (7.17.1 requires a slightly different patch, still haven't tested fix for 7.17.1):
Index: lib/http.c
===================================================================
--- lib/http.c (revision 67598)
+++ lib/http.c (revision 67599)
@@ -778,7 +778,7 @@
memcpy(buffer, http->postdata, (size_t)http->postsize);
fullsize = (size_t)http->postsize;
- if(http->backup.postsize) {
+ if(http->backup.postsize || http->backup.fread) {
/* move backup data into focus and continue on that */
http->postdata = http->backup.postdata;
http->postsize = http->backup.postsize;
@@ -787,6 +787,7 @@
http->sending++; /* move one step up */
+ http->backup.fread=NULL;
http->backup.postsize=0;
}
else
----------------------------------------------------------------------
>Comment By: Joe Malicki (jmalicki)
Date: 2008-01-14 16:05
Message:
Logged In: YES
user_id=1981241
Originator: YES
(Oh, I neglected to mention that if it doesn't fail, try bumping up the
size parameter passed into get_big_header()... the following updated
testcase takes it as a commandline argument for easier testing). Sorry for
not doing that earlier, I've been sitting on getting this to you for awhile
and I forgot some of the details temporarily.
File Added: curl-large-header-bug2.c
----------------------------------------------------------------------
Comment By: Daniel Stenberg (bagder)
Date: 2008-01-14 15:53
Message:
Logged In: YES
user_id=1110
Originator: NO
Sorry, I must be blind. I'll take it for a spin right away! Comments will
follow...
----------------------------------------------------------------------
Comment By: Joe Malicki (jmalicki)
Date: 2008-01-14 15:49
Message:
Logged In: YES
user_id=1981241
Originator: YES
If you notice, I attached a testcase that fails... does it not fail for
you?
In this testcase, it is clearly posting data. The reason why
http->backup.postsize is 0 is
that http->postsize is only ever initially set in curl 7.17.1 http.c:2643,
which is only
if CURLOPT_POSTFIELDS is set. Because I'm writing the posts with a
callback, this value is
never set (perhaps this is the real bug? The patch I posted was that way
because it was less intrusive).
I provided a testcase (curl-large-header-bug.c) so it could be reproduced
with code rather than description.
Are you proposing that the attached patch is rather the correct one? (it
is untested)
File Added: curl-large-headers2.diff
----------------------------------------------------------------------
Comment By: Daniel Stenberg (bagder)
Date: 2008-01-14 15:34
Message:
Logged In: YES
user_id=1110
Originator: NO
Can you please be more specific on as exact details as possible on what
you do to get this problem so that I can work on writing up a test case for
this?
I don't understand the patch. If http->backup.postsize is zero, then what
exactly is libcurl going to send when that condition equals true?
Also, while the 'fread' is now 'fread_func' in recent libcurls, how come
the patch isn't needed the exact same way there? I can't recall any
particular fixes in this area in a very long time?
----------------------------------------------------------------------
Comment By: Joe Malicki (jmalicki)
Date: 2008-01-14 11:45
Message:
Logged In: YES
user_id=1981241
Originator: YES
Above patch for 7.15.5 attached as a file.
File Added: curl-large-headers.diff
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=100976&aid=1871269&group_id=976
Received on 2008-01-14