You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by pe...@apache.org on 2001/09/12 20:02:57 UTC
cvs commit: xml-xerces/c/src/internal ReaderMgr.cpp
peiyongz 01/09/12 11:02:57
Modified: c/src/internal ReaderMgr.cpp
Log:
Bug# 3565: stream leakage in ReaderMgr, reported by Brian Quinlan
Revision Changes Path
1.13 +39 -25 xml-xerces/c/src/internal/ReaderMgr.cpp
Index: ReaderMgr.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/internal/ReaderMgr.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- ReaderMgr.cpp 2000/07/25 22:33:04 1.12
+++ ReaderMgr.cpp 2001/09/12 18:02:57 1.13
@@ -55,7 +55,7 @@
*/
/*
- * $Id: ReaderMgr.cpp,v 1.12 2000/07/25 22:33:04 aruna1 Exp $
+ * $Id: ReaderMgr.cpp,v 1.13 2001/09/12 18:02:57 peiyongz Exp $
*/
// ---------------------------------------------------------------------------
@@ -79,7 +79,6 @@
#include <internal/EndOfEntityException.hpp>
#include <internal/ReaderMgr.hpp>
-
// ---------------------------------------------------------------------------
// ReaderMgr: Constructors and Destructor
// ---------------------------------------------------------------------------
@@ -427,30 +426,45 @@
// to be possibly updated later by the encoding="" setting.
//
XMLReader* retVal = 0;
- if (src.getEncoding())
+
+ // XMLReader ctor invokes refreshRawBuffer() which calls
+ // newStream->readBytes().
+ // This readBytes() may throw exception, which neither
+ // refresRawBuffer(), nor XMLReader ctor catches.
+ // We need to handle this exception to avoid leak on newStream.
+
+ try {
+ if (src.getEncoding())
+ {
+ retVal = new XMLReader
+ (
+ src.getPublicId()
+ , src.getSystemId()
+ , newStream
+ , src.getEncoding()
+ , refFrom
+ , type
+ , source
+ );
+ }
+ else
+ {
+ retVal = new XMLReader
+ (
+ src.getPublicId()
+ , src.getSystemId()
+ , newStream
+ , refFrom
+ , type
+ , source
+ );
+ }
+ }
+
+ catch (...) //NetAccessorException&
{
- retVal = new XMLReader
- (
- src.getPublicId()
- , src.getSystemId()
- , newStream
- , src.getEncoding()
- , refFrom
- , type
- , source
- );
- }
- else
- {
- retVal = new XMLReader
- (
- src.getPublicId()
- , src.getSystemId()
- , newStream
- , refFrom
- , type
- , source
- );
+ delete newStream;
+ return 0;
}
// Set the next available reader number on this reader
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org