diff options
| author | sergei <sergei@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2010-10-28 20:23:42 +0000 |
|---|---|---|
| committer | sergei <sergei@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2010-10-28 20:23:42 +0000 |
| commit | 164ed35af4dd28c4c7c56be71c9fae47dc3388ba (patch) | |
| tree | d87d418891f197dfa8b51a82899fc4fe2640708e /packages/fcl-xml | |
| parent | 67e44f6d978d1db3a7144e97ffcf7217bfaec967 (diff) | |
| download | fpc-164ed35af4dd28c4c7c56be71c9fae47dc3388ba.tar.gz | |
* xmlread.pp, fixed an issue introduced by combination of r16046 and r16172: assigning doc.DocumentType only after DTD has been completely parsed prevented inner reader from parsing 2nd+ level entity references in default attribute values. This went unnoticed because of no positive tests, and was detected only by examining negative test diagnostic, namely for not-wf-sa-079 and not-wf-sa-080.
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@16248 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-xml')
| -rw-r--r-- | packages/fcl-xml/src/xmlread.pp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/packages/fcl-xml/src/xmlread.pp b/packages/fcl-xml/src/xmlread.pp index 01b5a5ec4f..4ebce6bf5d 100644 --- a/packages/fcl-xml/src/xmlread.pp +++ b/packages/fcl-xml/src/xmlread.pp @@ -1347,7 +1347,9 @@ begin FXML11 := doc.InheritsFrom(TXMLDocument) and (TXMLDocument(doc).XMLVersion = '1.1'); NSPrepare; Initialize(ASource); - FDocType := TDOMDocumentTypeEx(doc.DocType); + // See comment in EntityCheck() + if FDocType = nil then + FDocType := TDOMDocumentTypeEx(doc.DocType); ParseContent; end; @@ -1722,9 +1724,13 @@ begin if not Result.FResolved then begin // To build children of the entity itself, we must parse it "out of context" + // However, care must be taken to properly pass the DTD to InnerReader. + // We now have doc.DocumentType=nil while DTD is being parsed, + // which can break parsing 2+ level entities in default attribute values. InnerReader := TXMLReader.Create(FCtrl); try InnerReader.FAttrTag := FAttrTag; + InnerReader.FDocType := FDocType; EntityToSource(Result, Src); Result.SetReadOnly(False); if Assigned(Src) then |
