CInternetFile::ReadString bug?
Jim McCabe -- jmccabe@mail.portup.com Friday, August 02, 1996 Environment: Win95, MSVC 4.2, Win95 winsock, wininet.dll (06/17/96 11:53a; 286,784 bytes) I just installed MSVC 4.2 and tried compiling the TEAR sample. This is an MFC console program which downloads a web page and displays the source to stdout. The program has a problem, and it seems to be a bug in MFC CInternetFile::ReadString. The first time the function is called, it realizes it has no buffer and does the following: a) CInternetFile attempts to allocate a buffer, size 4096, and succeeds b) a call is made to InternetReadFile (WinInet.DLL), reading the requested data, and succeeds Then, the function leaves its new-buffer code and AGAIN calls InternetReadFile, apparently unaware that it has already called it. This results in lost data, the symptoms of which depend on the size of the web page: c) If the web page was small enough to get transmitted in the first InternetReadFile call, the next InternetReadFile call returns end-of-file and ReadString nulls the buffer that was correctly filled in step (b) d) If the web page was larger than the initial request, subsequent calls seem to work properly, except that the first burst of data from step (b) is overwritten and lost. This really surprised me, not only because ReadString is such a fundamental and often-used routine for CInternetFile, but also because net classes are one of the big new features of this release -- you'd think it would have been tested before cutting the disc. Then again, I can recall several times in the past when I thought I found a bug in Windows or MFC and it turned out to be my fault, so I'm wondering, has anyone else seen this behavior? Is there a patch for this, or should I rebuild MFC with my own fix? Thanks, Jim jmccabe@mail.portup.com - http://www.portup.com/~jmccabe
Mike Blaszczak -- mikeblas@nwlink.com Tuesday, August 06, 1996 [Mini-digest: 2 responses] At 02:01 PM 8/2/96 -0400, you wrote: >This really surprised me, not only because ReadString is such a fundamental >and often-used routine for CInternetFile, but also because net classes are one >of the big new features of this release -- you'd think it would have been >tested before cutting the disc. Unfortunately, the unset buffer case escaped me and the tester I was working with. The problem is fixed in the upcoming patch release for MFC, which will be released a week or two after the ActiveX SDK itself finally releases. >Is there a patch for this, or should I rebuild MFC with my own fix? I'd recommend using a zero-length buffer and waiting for the patch: rebuilding MFC for a problem that'll be fixed within a month is not worth the trouble of redistributing and installing and tracking and deleting separately named libraries. .B ekiM http://www.nwlink.com/~mikeblas/ These words are my own. I do not speak on behalf of Microsoft. -----From: kmg@gregcons.com (Kate Gregory) >The program has a problem, and it seems to be a bug in MFC >CInternetFile::ReadString. The first time the function is called, it realizes >it has no buffer I just ran across the same thing. My workaround was to call SetReadBufferSize(4096) before calling ReadString. Then it never "realizes it has no buffer." Kate -- Kate Gregory, kate@gregcons.com www.gregcons.com Gregory Consulting: programming, training, and advice Watch for my completely new edition of Using Visual C++ this fall...
| Вернуться в корень Архива |