- From: Steven Gray <sgray004@hotmail.com>
- Date: Thu, 17 Oct 2002 15:59:01 -0700
- To: www-lib@w3.org
I have not used libwww extensively, so please excuse me if I am inaccurate with any of the following: The setup: Windows platform libwww version 5.4.0 built as DLLs NoCacheClient profile Using HTLoadToFile with an "ftp://user:pwd@foo.bar/file" URL. Note, an identically coded HTTP request "http://foo.bar/file" does not cause this bug to occur. The above FTP URL causes a memory access violation to occur within HTChannel_deleteAll() when I attempt cleanup via HTProfile_delete(). Here's what I think is happening: 1) HTHost_deleteAll() deletes all hosts. Once each host is deleted, the Windows debug C runtime fills the memory formerly occupied by the deleted host instances with 0xfeeefeee for just such occasions where future code might accidentally refer to deleted hosts. 2) After HTHost_deleteAll() is called, HTChannel_deleteAll() is called and when free_channel() attempts to close the input stream, the illegal memory violation occurs. This appears to be because the host referenced by the channel has already been deleted, so the channel points to a host filled with garbage (the 0xfeeefeee values). 3) HTHost_getReadNet() then uses the host's pipeline member (which is a pointer to 0xfeeefeee, aka bad memory), so HTList_firstObject() causes an invalid memory reference when it attempts to dereference 0xfeeefeee (host->pipeline). For me, the bandaid solution was to modify the implementation of HTHost_getReadNet() with this ugly hack: PUBLIC HTNet * HTHost_getReadNet(HTHost * host) { #ifdef WIN32 /* !!!yikes!!! */ if (IsBadReadPtr(host->pipeline, 1)) return NULL; #endif return host ? (HTNet *) HTList_firstObject(host->pipeline) : NULL; } This appears to solve the problem as it prevents the dereferencing of an invalid (already freed) pointer. However, if this is a legitimate bug, I leave it to someone with a more intimate knowledge of the libwww source code to fix the root cause (i.e., why is channel_free() attempting to reference host structure instances that have already been deleted?). Anyone please correct me for any inaccuracies I've portrayed in the above. Cheers, --Steven Gray sgray004 @ hotmail.com _________________________________________________________________ Unlimited Internet access -- and 2 months free! Try MSN. http://resourcecenter.msn.com/access/plans/2monthsfree.asp
Received on Thursday, 17 October 2002 18:59:32 UTC