Browse Source

Minor fixes to the reader:
- Removed remaining assignments of TXMLFileInputSource.SystemID, as it is assigned in constructor.
- As attributes now remove themselves from owner upon destruction, removed the redundant check.
* ReadXMLFile, ReadDTDFile: Moved all assignments of Document to the 'finally' sections to avoid
leaks if parsing error happens. This was already done in most frequently used overloaded
ReadXMLFile, but wasn't noticed in other places.
* TXMLReader.CheckName was unable to detect a malformed local part of a QName if its prefix is
well-formed and crosses the buffer boundary. Fixed.

git-svn-id: trunk@13259 -

sergei 16 years ago
parent
commit
44ebbec358
1 changed files with 5 additions and 8 deletions
  1. 5 8
      packages/fcl-xml/src/xmlread.pp

+ 5 - 8
packages/fcl-xml/src/xmlread.pp

@@ -1526,6 +1526,7 @@ begin
     end;
     end;
 
 
     BufAppendChunk(FName, FSource.FBuf, p);
     BufAppendChunk(FName, FSource.FBuf, p);
+    Result := (FName.Length > 0);
 
 
     FSource.FBuf := p;
     FSource.FBuf := p;
     if (p^ <> #0) or not FSource.Reload then
     if (p^ <> #0) or not FSource.Reload then
@@ -1533,7 +1534,6 @@ begin
 
 
     p := FSource.FBuf;
     p := FSource.FBuf;
   until False;
   until False;
-  Result := (FName.Length > 0);
   if not (Result or (cnOptional in aFlags)) then
   if not (Result or (cnOptional in aFlags)) then
     RaiseNameNotFound;
     RaiseNameNotFound;
 end;
 end;
@@ -2463,8 +2463,7 @@ begin
       if DiscardIt then
       if DiscardIt then
         AttDef.Free;
         AttDef.Free;
     except
     except
-      if AttDef.OwnerElement = nil then
-        AttDef.Free;
+      AttDef.Free;
       raise;
       raise;
     end;
     end;
     SkipWhitespace;
     SkipWhitespace;
@@ -3639,8 +3638,8 @@ begin
   Reader := TXMLReader.Create;
   Reader := TXMLReader.Create;
   try
   try
     Reader.ProcessXML(Src);
     Reader.ProcessXML(Src);
-    ADoc := TXMLDocument(Reader.Doc);
   finally
   finally
+    ADoc := TXMLDocument(Reader.Doc);
     Reader.Free;
     Reader.Free;
   end;
   end;
 end;
 end;
@@ -3688,7 +3687,6 @@ begin
   Reader := TXMLReader.Create;
   Reader := TXMLReader.Create;
   try
   try
     Src := TXMLFileInputSource.Create(f);
     Src := TXMLFileInputSource.Create(f);
-    Src.SystemID := FilenameToURI(TTextRec(f).Name);
     Reader.ProcessFragment(Src, AParentNode);
     Reader.ProcessFragment(Src, AParentNode);
   finally
   finally
     Reader.Free;
     Reader.Free;
@@ -3737,10 +3735,9 @@ begin
   Reader := TXMLReader.Create;
   Reader := TXMLReader.Create;
   try
   try
     Src := TXMLFileInputSource.Create(f);
     Src := TXMLFileInputSource.Create(f);
-    Src.SystemID := FilenameToURI(TTextRec(f).Name);
     Reader.ProcessDTD(Src);
     Reader.ProcessDTD(Src);
-    ADoc := TXMLDocument(Reader.doc);
   finally
   finally
+    ADoc := TXMLDocument(Reader.doc);
     Reader.Free;
     Reader.Free;
   end;
   end;
 end;
 end;
@@ -3756,8 +3753,8 @@ begin
     Src := TXMLStreamInputSource.Create(f, False);
     Src := TXMLStreamInputSource.Create(f, False);
     Src.SystemID := ABaseURI;
     Src.SystemID := ABaseURI;
     Reader.ProcessDTD(Src);
     Reader.ProcessDTD(Src);
-    ADoc := TXMLDocument(Reader.doc);
   finally
   finally
+    ADoc := TXMLDocument(Reader.doc);
     Reader.Free;
     Reader.Free;
   end;
   end;
 end;
 end;