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