Skip to content
Snippets Groups Projects
Commit 01af96b4 authored by Tinny Ng's avatar Tinny Ng
Browse files

Should check if XMLReader is created successfully.

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@173549 13f79535-47bb-0310-9956-ffa450edef68
parent dba27e61
No related branches found
No related tags found
No related merge requests found
/* /*
* The Apache Software License, Version 1.1 * The Apache Software License, Version 1.1
* *
* Copyright (c) 1999-2000 The Apache Software Foundation. All rights * Copyright (c) 1999-2000 The Apache Software Foundation. All rights
* reserved. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the * the documentation and/or other materials provided with the
* distribution. * distribution.
* *
* 3. The end-user documentation included with the redistribution, * 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment: * if any, must include the following acknowledgment:
* "This product includes software developed by the * "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)." * Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, * Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear. * if and wherever such third-party acknowledgments normally appear.
* *
* 4. The names "Xerces" and "Apache Software Foundation" must * 4. The names "Xerces" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this * not be used to endorse or promote products derived from this
* software without prior written permission. For written * software without prior written permission. For written
* permission, please contact apache\@apache.org. * permission, please contact apache\@apache.org.
* *
* 5. Products derived from this software may not be called "Apache", * 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written * nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation. * permission of the Apache Software Foundation.
* *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* ==================================================================== * ====================================================================
* *
* This software consists of voluntary contributions made by many * This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation, and was * individuals on behalf of the Apache Software Foundation, and was
* originally based on software copyright (c) 1999, International * originally based on software copyright (c) 1999, International
...@@ -427,10 +427,10 @@ XMLReader* ReaderMgr::createReader( const InputSource& src ...@@ -427,10 +427,10 @@ XMLReader* ReaderMgr::createReader( const InputSource& src
// //
XMLReader* retVal = 0; XMLReader* retVal = 0;
// XMLReader ctor invokes refreshRawBuffer() which calls // XMLReader ctor invokes refreshRawBuffer() which calls
// newStream->readBytes(). // newStream->readBytes().
// This readBytes() may throw exception, which neither // This readBytes() may throw exception, which neither
// refresRawBuffer(), nor XMLReader ctor catches. // refresRawBuffer(), nor XMLReader ctor catches.
// We need to handle this exception to avoid leak on newStream. // We need to handle this exception to avoid leak on newStream.
try { try {
...@@ -467,6 +467,12 @@ XMLReader* ReaderMgr::createReader( const InputSource& src ...@@ -467,6 +467,12 @@ XMLReader* ReaderMgr::createReader( const InputSource& src
throw; throw;
} }
// If it failed for any reason, then return zero.
if (!retVal) {
delete newStream;
return 0;
}
// Set the next available reader number on this reader // Set the next available reader number on this reader
retVal->setReaderNum(fNextReaderNum++); retVal->setReaderNum(fNextReaderNum++);
return retVal; return retVal;
...@@ -588,23 +594,33 @@ ReaderMgr::createIntEntReader( const XMLCh* const sysId ...@@ -588,23 +594,33 @@ ReaderMgr::createIntEntReader( const XMLCh* const sysId
// as a 'do nothing' transcoder for the already internalized XMLCh // as a 'do nothing' transcoder for the already internalized XMLCh
// data that makes up an internal entity. // data that makes up an internal entity.
// //
BinMemInputStream* newStream = new BinMemInputStream
(
(const XMLByte*)dataBuf
, dataLen * sizeof(XMLCh)
, copyBuf ? BinMemInputStream::BufOpt_Copy
: BinMemInputStream::BufOpt_Reference
);
if (!newStream)
return 0;
XMLReader* retVal = new XMLReader XMLReader* retVal = new XMLReader
( (
sysId sysId
, 0 , 0
, new BinMemInputStream , newStream
(
(const XMLByte*)dataBuf
, dataLen * sizeof(XMLCh)
, copyBuf ? BinMemInputStream::BufOpt_Copy
: BinMemInputStream::BufOpt_Reference
)
, XMLUni::fgXMLChEncodingString , XMLUni::fgXMLChEncodingString
, refFrom , refFrom
, type , type
, XMLReader::Source_Internal , XMLReader::Source_Internal
); );
// If it failed for any reason, then return zero.
if (!retVal) {
delete newStream;
return 0;
}
// Set the reader number to the next available number // Set the reader number to the next available number
retVal->setReaderNum(fNextReaderNum++); retVal->setReaderNum(fNextReaderNum++);
return retVal; return retVal;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment