Browse Source

fcl-passrc: fixed double free

git-svn-id: trunk@39461 -
Mattias Gaertner 7 years ago
parent
commit
4b973bf22d

+ 1 - 1
packages/fcl-passrc/src/pastree.pp

@@ -3723,7 +3723,7 @@ end;
 
 
 function TPasArrayType.IsGenericArray: Boolean;
 function TPasArrayType.IsGenericArray: Boolean;
 begin
 begin
-  Result:=elType is TPasGenericTemplateType;
+  Result:=ElType is TPasGenericTemplateType;
 end;
 end;
 
 
 function TPasArrayType.IsPacked: Boolean;
 function TPasArrayType.IsPacked: Boolean;

+ 1 - 0
packages/fcl-passrc/src/pparser.pp

@@ -3470,6 +3470,7 @@ begin
              CheckHint(ArrEl,True);
              CheckHint(ArrEl,True);
              ArrEl.ElType.Release{$IFDEF CheckPasTreeRefCount}('CreateElement'){$ENDIF};
              ArrEl.ElType.Release{$IFDEF CheckPasTreeRefCount}('CreateElement'){$ENDIF};
              ArrEl.ElType:=TPasGenericTemplateType(List[0]);
              ArrEl.ElType:=TPasGenericTemplateType(List[0]);
+             List.Clear;
              Engine.FinishScope(stTypeDef,ArrEl);
              Engine.FinishScope(stTypeDef,ArrEl);
              end;
              end;
           else
           else

+ 1 - 1
packages/fcl-passrc/tests/tctypeparser.pas

@@ -2989,8 +2989,8 @@ begin
   ParseDeclarations;
   ParseDeclarations;
   AssertEquals('One type definition',1,Declarations.Types.Count);
   AssertEquals('One type definition',1,Declarations.Types.Count);
   AssertEquals('First declaration is type definition.',TPasArrayType,TObject(Declarations.Types[0]).ClassType);
   AssertEquals('First declaration is type definition.',TPasArrayType,TObject(Declarations.Types[0]).ClassType);
-  AssertEquals('First declaration has correct name.','TArray',TPasType(Declarations.Types[0]).Name);
   FType:=TPasType(Declarations.Types[0]);
   FType:=TPasType(Declarations.Types[0]);
+  AssertEquals('First declaration has correct name.','TArray',FType.Name);
   AssertEquals('Array type','',TPasArrayType(TheType).IndexRange);
   AssertEquals('Array type','',TPasArrayType(TheType).IndexRange);
   AssertEquals('Generic Array type',True,TPasArrayType(TheType).IsGenericArray);
   AssertEquals('Generic Array type',True,TPasArrayType(TheType).IsGenericArray);
 end;
 end;