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.
This commit is contained in:
toby 2017-02-09 11:25:09 -05:00
parent d5796706e4
commit 616cebff5a

View file

@ -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");