--- Merging r31773 into '.':

U    packages/fcl-xml/src/sax_html.pp
--- Recording mergeinfo for merge of r31773 into '.':
 U   .
--- Merging r33040 into '.':
U    packages/fcl-xml/src/xmltextreader.pp
--- Recording mergeinfo for merge of r33040 into '.':
 G   .
--- Merging r33042 into '.':
U    packages/fcl-xml/src/dtdmodel.pp
--- Recording mergeinfo for merge of r33042 into '.':
 G   .

# revisions: 31773,33040,33042
------------------------------------------------------------------------
r31773 | sergei | 2015-09-22 07:37:39 +0200 (di, 22 sep 2015) | 3 lines
Changed paths:
   M /trunk/packages/fcl-xml/src/sax_html.pp

- THTMLToDOMConverter.FElementStack is created and destroyed, but unused otherwise. Removed.
* THTMLToDOMConverter.ReaderEndElement: Since each item in FNodeBuffer is removed only when processing EndElement event for its *parent* element (not the element it corresponds to, if any), it must be flagged for ignore once its own EndElement is handled. Otherwise, several same-named elements nested within each other were ending up in a wrong DOM tree. This bug was reported in Russian forum.

------------------------------------------------------------------------
------------------------------------------------------------------------
r33040 | sergei | 2016-02-02 03:27:28 +0100 (di, 02 feb 2016) | 2 lines
Changed paths:
   M /trunk/packages/fcl-xml/src/xmltextreader.pp

* fcl-xml: Fixed parsing DTD, whitespace after name is mandatory only if followed by ExternalID. Mantis #29569.

------------------------------------------------------------------------
------------------------------------------------------------------------
r33042 | sergei | 2016-02-02 18:17:08 +0100 (di, 02 feb 2016) | 1 line
Changed paths:
   M /trunk/packages/fcl-xml/src/dtdmodel.pp

* fcl-xml: fixed off-by-one error, preventing 'xmlns:foo' in DTD ATTLIST from being recognized as namespace declaration.
------------------------------------------------------------------------

git-svn-id: branches/fixes_3_0@33409 -
This commit is contained in:
marco 2016-04-02 16:31:19 +00:00
parent 5f8057775b
commit 8cc21d5591
3 changed files with 14 additions and 11 deletions

View File

@ -396,7 +396,8 @@ begin
FData^.FQName := aName;
FData^.FColonPos := aColonPos;
FData^.FTypeInfo := Self;
FIsNamespaceDecl := ((Length(aName^.Key) = 5) or (aColonPos = 6)) and
{ aColonPos is zero-based }
FIsNamespaceDecl := ((Length(aName^.Key) = 5) or (aColonPos = 5)) and
(Pos(XMLString('xmlns'), aName^.Key) = 1);
end;

View File

@ -78,6 +78,7 @@ type
THTMLNodeInfo = class
NodeType: THTMLNodeType;
Closed: Boolean;
DOMNode: TDOMNode;
end;
@ -85,7 +86,6 @@ type
private
FReader: THTMLReader;
FDocument: TDOMDocument;
FElementStack: TList;
FNodeBuffer: TList;
IsFragmentMode, FragmentRootSet: Boolean;
FragmentRoot: TDOMNode;
@ -545,7 +545,6 @@ begin
FReader.OnStartElement := @ReaderStartElement;
FReader.OnEndElement := @ReaderEndElement;
FDocument := ADocument;
FElementStack := TList.Create;
FNodeBuffer := TList.Create;
end;
@ -566,7 +565,6 @@ begin
THTMLNodeInfo(FNodeBuffer[i]).Free;
FNodeBuffer.Free;
FElementStack.Free;
inherited Destroy;
end;
@ -653,7 +651,7 @@ begin
while i >= 0 do
begin
NodeInfo := THTMLNodeInfo(FNodeBuffer.Items[i]);
if (NodeInfo.NodeType = ntTag) and
if (NodeInfo.NodeType = ntTag) and (not NodeInfo.Closed) and
(CompareText(NodeInfo.DOMNode.NodeName, LocalName) = 0) then
begin
// We found the matching start tag
@ -689,6 +687,7 @@ begin
NodeInfo2.Free;
FNodeBuffer.Delete(i);
end;
NodeInfo.Closed := True;
break;
end;
Dec(i);

View File

@ -1911,12 +1911,15 @@ begin
CheckName;
SetString(FDocType.FName, FName.Buffer, FName.Length);
DTDName := FNameTable.FindOrAdd(FName.Buffer, FName.Length);
SkipS(True);
StoreLocation(Locs[0]);
HasAtts := ParseExternalID(FDocType.FSystemID, FDocType.FPublicID, Locs[1], False);
if HasAtts then
Locs[2] := FTokenStart;
SkipS;
if SkipS then
begin
StoreLocation(Locs[0]);
HasAtts := ParseExternalID(FDocType.FSystemID, FDocType.FPublicID, Locs[1], False);
if HasAtts then
Locs[2] := FTokenStart;
SkipS;
end;
if CheckForChar('[') then
begin