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