From f6452d229d2072b459c5f6e4ac3f895032e9060f Mon Sep 17 00:00:00 2001 From: Neil Graham <neilg@apache.org> Date: Tue, 19 Aug 2003 14:15:18 +0000 Subject: [PATCH] fixing bug 21001; thanks to David Cargill git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@175149 13f79535-47bb-0310-9956-ffa450edef68 --- src/xercesc/parsers/DOMBuilderImpl.cpp | 20 +++++++++++++++++++- src/xercesc/parsers/XercesDOMParser.cpp | 18 ++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/xercesc/parsers/DOMBuilderImpl.cpp b/src/xercesc/parsers/DOMBuilderImpl.cpp index e408b3154..0f3d34cf8 100644 --- a/src/xercesc/parsers/DOMBuilderImpl.cpp +++ b/src/xercesc/parsers/DOMBuilderImpl.cpp @@ -545,18 +545,24 @@ Grammar* DOMBuilderImpl::loadGrammar(const char* const systemId, try { setParseInProgress(true); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(0); grammar = getScanner()->loadGrammar(systemId, grammarType, toCache); // Release DOM tree - DTD DOMDocument* doc = adoptDocument(); if (doc) doc->release(); - + + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); } catch(...) { + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); throw; } @@ -576,6 +582,8 @@ Grammar* DOMBuilderImpl::loadGrammar(const XMLCh* const systemId, try { setParseInProgress(true); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(0); grammar = getScanner()->loadGrammar(systemId, grammarType, toCache); // Release DOM tree - DTD @@ -583,11 +591,15 @@ Grammar* DOMBuilderImpl::loadGrammar(const XMLCh* const systemId, if (doc) doc->release(); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); } catch(...) { + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); throw; } @@ -609,6 +621,8 @@ Grammar* DOMBuilderImpl::loadGrammar(const DOMInputSource& source, Wrapper4DOMInputSource isWrapper((DOMInputSource*) &source, false, getMemoryManager()); setParseInProgress(true); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(0); grammar = getScanner()->loadGrammar(isWrapper, grammarType, toCache); // Release DOM tree - DTD @@ -616,11 +630,15 @@ Grammar* DOMBuilderImpl::loadGrammar(const DOMInputSource& source, if (doc) doc->release(); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); } catch(...) { + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); throw; } diff --git a/src/xercesc/parsers/XercesDOMParser.cpp b/src/xercesc/parsers/XercesDOMParser.cpp index 484b9c2f3..7b8288f2e 100644 --- a/src/xercesc/parsers/XercesDOMParser.cpp +++ b/src/xercesc/parsers/XercesDOMParser.cpp @@ -265,12 +265,18 @@ Grammar* XercesDOMParser::loadGrammar(const char* const systemId, try { setParseInProgress(true); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(0); grammar = getScanner()->loadGrammar(systemId, grammarType, toCache); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); } catch(...) { + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); throw; } @@ -290,12 +296,18 @@ Grammar* XercesDOMParser::loadGrammar(const XMLCh* const systemId, try { setParseInProgress(true); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(0); grammar = getScanner()->loadGrammar(systemId, grammarType, toCache); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); } catch(...) { + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); throw; } @@ -315,12 +327,18 @@ Grammar* XercesDOMParser::loadGrammar(const InputSource& source, try { setParseInProgress(true); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(0); grammar = getScanner()->loadGrammar(source, grammarType, toCache); + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); } catch(...) { + if (grammarType == Grammar::DTDGrammarType) + getScanner()->setDocTypeHandler(this); setParseInProgress(false); throw; } -- GitLab