From 616cebff5a65664b64c09cc418ba2475c9a7dc29 Mon Sep 17 00:00:00 2001 From: toby Date: Thu, 9 Feb 2017 11:25:09 -0500 Subject: [PATCH] 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. --- src/js/operations/Compress.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/js/operations/Compress.js b/src/js/operations/Compress.js index 7b7c875b..0a08c1ad 100755 --- a/src/js/operations/Compress.js +++ b/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");