Kaynağa Gözat

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 yıl önce
ebeveyn
işleme
44ebbec358
1 değiştirilmiş dosya ile 5 ekleme ve 8 silme
  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;