Skip to content
Snippets Groups Projects
Commit f6452d22 authored by Neil Graham's avatar Neil Graham
Browse files

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
parent 92262060
No related branches found
No related tags found
No related merge requests found
...@@ -545,18 +545,24 @@ Grammar* DOMBuilderImpl::loadGrammar(const char* const systemId, ...@@ -545,18 +545,24 @@ Grammar* DOMBuilderImpl::loadGrammar(const char* const systemId,
try try
{ {
setParseInProgress(true); setParseInProgress(true);
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(0);
grammar = getScanner()->loadGrammar(systemId, grammarType, toCache); grammar = getScanner()->loadGrammar(systemId, grammarType, toCache);
// Release DOM tree - DTD // Release DOM tree - DTD
DOMDocument* doc = adoptDocument(); DOMDocument* doc = adoptDocument();
if (doc) if (doc)
doc->release(); doc->release();
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(this);
setParseInProgress(false); setParseInProgress(false);
} }
catch(...) catch(...)
{ {
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(this);
setParseInProgress(false); setParseInProgress(false);
throw; throw;
} }
...@@ -576,6 +582,8 @@ Grammar* DOMBuilderImpl::loadGrammar(const XMLCh* const systemId, ...@@ -576,6 +582,8 @@ Grammar* DOMBuilderImpl::loadGrammar(const XMLCh* const systemId,
try try
{ {
setParseInProgress(true); setParseInProgress(true);
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(0);
grammar = getScanner()->loadGrammar(systemId, grammarType, toCache); grammar = getScanner()->loadGrammar(systemId, grammarType, toCache);
// Release DOM tree - DTD // Release DOM tree - DTD
...@@ -583,11 +591,15 @@ Grammar* DOMBuilderImpl::loadGrammar(const XMLCh* const systemId, ...@@ -583,11 +591,15 @@ Grammar* DOMBuilderImpl::loadGrammar(const XMLCh* const systemId,
if (doc) if (doc)
doc->release(); doc->release();
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(this);
setParseInProgress(false); setParseInProgress(false);
} }
catch(...) catch(...)
{ {
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(this);
setParseInProgress(false); setParseInProgress(false);
throw; throw;
} }
...@@ -609,6 +621,8 @@ Grammar* DOMBuilderImpl::loadGrammar(const DOMInputSource& source, ...@@ -609,6 +621,8 @@ Grammar* DOMBuilderImpl::loadGrammar(const DOMInputSource& source,
Wrapper4DOMInputSource isWrapper((DOMInputSource*) &source, false, getMemoryManager()); Wrapper4DOMInputSource isWrapper((DOMInputSource*) &source, false, getMemoryManager());
setParseInProgress(true); setParseInProgress(true);
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(0);
grammar = getScanner()->loadGrammar(isWrapper, grammarType, toCache); grammar = getScanner()->loadGrammar(isWrapper, grammarType, toCache);
// Release DOM tree - DTD // Release DOM tree - DTD
...@@ -616,11 +630,15 @@ Grammar* DOMBuilderImpl::loadGrammar(const DOMInputSource& source, ...@@ -616,11 +630,15 @@ Grammar* DOMBuilderImpl::loadGrammar(const DOMInputSource& source,
if (doc) if (doc)
doc->release(); doc->release();
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(this);
setParseInProgress(false); setParseInProgress(false);
} }
catch(...) catch(...)
{ {
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(this);
setParseInProgress(false); setParseInProgress(false);
throw; throw;
} }
......
...@@ -265,12 +265,18 @@ Grammar* XercesDOMParser::loadGrammar(const char* const systemId, ...@@ -265,12 +265,18 @@ Grammar* XercesDOMParser::loadGrammar(const char* const systemId,
try try
{ {
setParseInProgress(true); setParseInProgress(true);
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(0);
grammar = getScanner()->loadGrammar(systemId, grammarType, toCache); grammar = getScanner()->loadGrammar(systemId, grammarType, toCache);
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(this);
setParseInProgress(false); setParseInProgress(false);
} }
catch(...) catch(...)
{ {
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(this);
setParseInProgress(false); setParseInProgress(false);
throw; throw;
} }
...@@ -290,12 +296,18 @@ Grammar* XercesDOMParser::loadGrammar(const XMLCh* const systemId, ...@@ -290,12 +296,18 @@ Grammar* XercesDOMParser::loadGrammar(const XMLCh* const systemId,
try try
{ {
setParseInProgress(true); setParseInProgress(true);
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(0);
grammar = getScanner()->loadGrammar(systemId, grammarType, toCache); grammar = getScanner()->loadGrammar(systemId, grammarType, toCache);
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(this);
setParseInProgress(false); setParseInProgress(false);
} }
catch(...) catch(...)
{ {
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(this);
setParseInProgress(false); setParseInProgress(false);
throw; throw;
} }
...@@ -315,12 +327,18 @@ Grammar* XercesDOMParser::loadGrammar(const InputSource& source, ...@@ -315,12 +327,18 @@ Grammar* XercesDOMParser::loadGrammar(const InputSource& source,
try try
{ {
setParseInProgress(true); setParseInProgress(true);
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(0);
grammar = getScanner()->loadGrammar(source, grammarType, toCache); grammar = getScanner()->loadGrammar(source, grammarType, toCache);
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(this);
setParseInProgress(false); setParseInProgress(false);
} }
catch(...) catch(...)
{ {
if (grammarType == Grammar::DTDGrammarType)
getScanner()->setDocTypeHandler(this);
setParseInProgress(false); setParseInProgress(false);
throw; throw;
} }
......
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