BUG: MFC ISAPI Generates Access Violation in CHtmlStream.DetachLast reviewed: March 10, 1998Article ID: Q167736 |
The information in this article applies to:
SYMPTOMSWhen an MFC ISAPI extension DLL generates HTML text whose length is exactly a multiple of 4096 bytes, an access violation is generated in Internet Information Server (IIS).
CAUSEThere is a bug with the CHtmlStream class (in the CHtmlStream::Detach() method), where a null character is appended to the end of the stream to end the string. The buffer is allocated in 4K increments, and if the size of the stream is a multiple of 4K, the null character is written in memory that has not been allocated.
RESOLUTIONTo work around this problem, make sure that the length of the CHtmlStream is not a multiple of 4096. You can use code similar to this:
if ( pCtxt->m_pStream->GetStreamSize() % 4096 == 0 ) *pCtxt << _T( " " ) ;You will need to do this at the end of any function that returns data to the server. Here is an example:
void CTestExtension::Default(CHttpServerContext* pCtxt) { StartContent(pCtxt); WriteTitle(pCtxt); *pCtxt << _T("This default message was produced by the Internet"); *pCtxt << _T(" Server DLL Wizard. Edit your CTestExtension::Default()"); *pCtxt << _T(" implementation to change it.\r\n"); EndContent(pCtxt); if ( pCtxt->m_pStream->GetStreamSize() % 4096 == 0 ) *pCtxt << _T( " ") ; }You want to put this code at the end of the proc because any of the code before this may change the size of the buffer.
STATUSMicrosoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. We are researching this bug and will post new information here in the Microsoft Knowledge Base as it becomes available. (c) Microsoft Corporation 1997, All Rights Reserved. Contributions by Leon Braginski, Microsoft Corporation Keywords : IISAPI MfcISAPI vcbuglist410 vcbuglist420 vcbuglist500 Technology : kbInetDev Version : 1.0 2.0 3.0 4.1 4.2 4.2b 5.0 Platform : NT WINDOWS Issue type : kbbug |
================================================================================
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |