فهرست منبع

Fix "A lone zero block at ##" bug

Before, the tar operation would write the incorrect number of bytes to
indicate the end of the tar file. It should have been 2 blocks of 512
ascii zeros, but it would write 529 zeros instead.

The new implementation of `writeEndBlocks` is nicer and we can reuse
code with the `addEmptyBlock` function.
toby 8 سال پیش
والد
کامیت
616cebff5a
1فایلهای تغییر یافته به همراه12 افزوده شده و 7 حذف شده
  1. 12 7
      src/js/operations/Compress.js

+ 12 - 7
src/js/operations/Compress.js

@@ -388,13 +388,17 @@ var Compress = {
             this.position = 0;
         };
 
+        Tarball.prototype.addEmptyBlock = function() {
+            var filler = new Array(512);
+            filler.fill(0);
+            this.bytes = this.bytes.concat(filler);
+        };
+
         Tarball.prototype.writeBytes = function(bytes) {
             var self = this;
 
-            if(this.bytes.length - this.position < 512) {
-                var filler = new Array(512);
-                filler.fill(0);
-                this.bytes = this.bytes.concat(filler);
+            if(this.position + bytes.length > this.bytes.length) {
+                this.addEmptyBlock();
             }
 
             Array.prototype.forEach.call(bytes, function(b, i) {
@@ -408,9 +412,10 @@ var Compress = {
         };
 
         Tarball.prototype.writeEndBlocks = function() {
-            var filler = new Array(512 * 2);
-            filler.fill(0);
-            this.writeBytes(filler);
+            var numEmptyBlocks = 2;
+            for(var i = 0; i < numEmptyBlocks; i++) {
+                this.addEmptyBlock();
+            }
         };
 
         var fileSize = padLeft(input.length.toString(8), 11, "0");