Browse Source

pastojs: filer: catch EDecompressionError and ECompressionError and convert to reader/writer error

git-svn-id: trunk@39383 -
Mattias Gaertner 7 years ago
parent
commit
2fcdf1af19

+ 4 - 4
packages/pastojs/src/pas2jscompiler.pp

@@ -18,10 +18,10 @@ unit Pas2jsCompiler;
 interface
 interface
 
 
 uses
 uses
-  Classes, SysUtils, RtlConsts, AVL_Tree, contnrs, PScanner, PParser, PasTree,
-  PasResolver, PasUseAnalyzer, PasResolveEval, jstree, jswriter, JSSrcMap,
-  FPPas2Js, FPPJsSrcMap, Pas2jsFileUtils, Pas2jsLogger, Pas2jsFileCache,
-  Pas2jsPParser, Pas2JsFiler;
+  Classes, SysUtils, RtlConsts, AVL_Tree, contnrs, PScanner, PParser,
+  PasTree, PasResolver, PasUseAnalyzer, PasResolveEval, jstree, jswriter,
+  JSSrcMap, FPPas2Js, FPPJsSrcMap, Pas2jsFileUtils, Pas2jsLogger,
+  Pas2jsFileCache, Pas2jsPParser, Pas2JsFiler;
 
 
 const
 const
   VersionMajor = 0;
   VersionMajor = 0;

+ 27 - 19
packages/pastojs/src/pas2jsfiler.pp

@@ -3950,17 +3950,20 @@ begin
     {$ENDIF}
     {$ENDIF}
     Pas2jsFiler.WriteJSON(aJSON,TargetStream,Compressed);
     Pas2jsFiler.WriteJSON(aJSON,TargetStream,Compressed);
     if Compressed then
     if Compressed then
-      begin
-      {$IFDEF VerbosePCUFiler}
-      writeln('TPCUWriter.WritePCU zip...');
-      {$ENDIF}
-      Comp:=Tcompressionstream.create(cldefault,aStream);
       try
       try
-        Comp.WriteDWord(TargetStream.Size);
-        Comp.Write(TMemoryStream(TargetStream).Memory^,TargetStream.Size);
-      finally
-        Comp.Free;
-      end;
+        {$IFDEF VerbosePCUFiler}
+        writeln('TPCUWriter.WritePCU zip...');
+        {$ENDIF}
+        Comp:=Tcompressionstream.create(cldefault,aStream);
+        try
+          Comp.WriteDWord(TargetStream.Size);
+          Comp.Write(TMemoryStream(TargetStream).Memory^,TargetStream.Size);
+        finally
+          Comp.Free;
+        end;
+      except
+        on E: Ecompressionerror do
+          RaiseMsg(20180704163113,'compression error: '+E.Message);
       end;
       end;
     {$IFDEF VerbosePCUFiler}
     {$IFDEF VerbosePCUFiler}
     writeln('TPCUWriter.WritePCU END');
     writeln('TPCUWriter.WritePCU END');
@@ -7541,16 +7544,21 @@ begin
   try
   try
     if Compressed then
     if Compressed then
       begin
       begin
-      Decomp:=Tdecompressionstream.create(aStream);
       try
       try
-        Count:=Decomp.ReadDWord;
-        if Count>123456789 then
-          RaiseMsg(20180313233209,'too big, invalid format');
-        Src:=TMemoryStream.Create;
-        Src.Size:=Count;
-        Decomp.read(TMemoryStream(Src).Memory^,Src.Size);
-      finally
-        Decomp.Free;
+        Decomp:=Tdecompressionstream.create(aStream);
+        try
+          Count:=Decomp.ReadDWord;
+          if Count>123456789 then
+            RaiseMsg(20180313233209,'too big, invalid format');
+          Src:=TMemoryStream.Create;
+          Src.Size:=Count;
+          Decomp.read(TMemoryStream(Src).Memory^,Src.Size);
+        finally
+          Decomp.Free;
+        end;
+      except
+        on E: Edecompressionerror do
+          RaiseMsg(20180704162214,'decompression error: '+E.Message);
       end;
       end;
       Src.Position:=0;
       Src.Position:=0;
       end
       end

+ 3 - 3
packages/pastojs/tests/tcmodules.pas

@@ -20067,9 +20067,9 @@ begin
     '$mod.$rtti.$inherited("TColorTypeAlias", pas.unit1.$rtti["TColor"], {});',
     '$mod.$rtti.$inherited("TColorTypeAlias", pas.unit1.$rtti["TColor"], {});',
     'rtl.createClass($mod, "TObject", null, function () {',
     'rtl.createClass($mod, "TObject", null, function () {',
     '  this.$init = function () {',
     '  this.$init = function () {',
-    '    this.fColor = -5;',
-    '    this.fAlias = -5;',
-    '    this.fTypeAlias = -5;',
+    '    this.fColor = 0;',
+    '    this.fAlias = 0;',
+    '    this.fTypeAlias = 0;',
     '  };',
     '  };',
     '  this.$final = function () {',
     '  this.$final = function () {',
     '  };',
     '  };',