Browse Source

Fixed FPC bug caused by not initialized out variables

PascalCoin 4 years ago
parent
commit
8d4b0deff9
4 changed files with 22 additions and 3 deletions
  1. 12 2
      src/core/UEPasa.pas
  2. 4 0
      src/core/UNode.pas
  3. 1 0
      src/core/UPCRPCSend.pas
  4. 5 1
      src/core/URPC.pas

+ 12 - 2
src/core/UEPasa.pas

@@ -129,7 +129,7 @@ type
       class function Parse(const AEPasaText: String): TEPasa; static;
 
       class function CalculateAccountChecksum(AAccNo: UInt32): Byte; static; inline;
-
+      procedure Clear;
   end;
 
 
@@ -251,6 +251,17 @@ end;
 
 { TEPasa }
 
+procedure TEPasa.Clear;
+begin
+  Self.FAccount.Clear;
+  Self.FAccountChecksum.Clear;
+  Self.FAccountName:='';
+  Self.FPayload:='';
+  Self.FPassword:='';
+  Self.FExtendedChecksum:='';
+  Self.FPayloadType:=[];
+end;
+
 function TEPasa.GetAccount: TNullable<UInt32>;
 begin
   Result := FAccount;
@@ -422,7 +433,6 @@ class function TEPasa.TryParse(const AEPasaText: String; out AEPasa: TEPasa): Bo
 var
   LParser: TEPasaParser;
   LDisposables : TDisposables;
-
 begin
   LParser := LDisposables.AddObject( TEPasaParser.Create() ) as TEPasaParser;
   Result := LParser.TryParse(AEPasaText, AEPasa);

+ 4 - 0
src/core/UNode.pas

@@ -873,6 +873,10 @@ Function TNode.TryResolveEPASA(const AEPasa : TEPasa; out AResolvedAccount: Card
 var
   LErrMsg : String;
 begin
+  AResolvedAccount := 0;
+  AResolvedKey.Clear;
+  ARequiresPurchase := False;
+  AErrorMessage := '';
   if (AEPasa.IsPayToKey) then begin
     // Parse account key in EPASA
     if NOT TAccountComp.AccountPublicKeyImport(AEPasa.Payload, AResolvedKey, LErrMsg) then begin

+ 1 - 0
src/core/UPCRPCSend.pas

@@ -142,6 +142,7 @@ begin
     Exit;
   end else LSender := ASender.Node.GetMempoolAccount(LSender.account);
 
+  LTarget := CT_Account_NUL;
   if Not TPascalCoinJSONComp.CaptureEPASA(AInputParams,'target',ASender.Node, LTargetEPASA, LTarget.account, LTargetKey, LTargetRequiresPurchase, AErrorDesc) then begin
     AErrorNum := CT_RPC_ErrNum_InvalidAccount;
     Exit;

+ 5 - 1
src/core/URPC.pas

@@ -386,7 +386,11 @@ end;
 class function TPascalCoinJSONComp.CaptureEPASA(const AInputParams : TPCJSONObject; const AParamName : String; const ANode : TNode; out AEPasa: TEPasa; out AResolvedAccount: Cardinal; out AResolvedKey : TAccountKey; out ARequiresPurchase : Boolean; var AErrorParam : String): Boolean;
 var LParamValue : String;
 Begin
-
+  AEPasa.Clear;
+  AResolvedAccount := 0;
+  AResolvedKey.Clear;
+  ARequiresPurchase := False;
+  AErrorParam := '';
   LParamValue := AInputParams.AsString(AParamName,'');
   if Length(LParamValue)>0 then begin
     if Not TEPasa.TryParse(LParamValue, AEPasa) then begin