diff --git a/io.js b/io.js index 7576660..6eabfe9 100644 --- a/io.js +++ b/io.js @@ -194,7 +194,7 @@ bitjs.io.BitStream.prototype.readBits = function(n) { * bits in the current byte. * @param {number} n The number of bytes to peek. * @param {boolean=} movePointers Whether to move the pointer, defaults false. - * @return {number} The peeked bytes, as an unsigned number. + * @return {Uint8Array} The subarray. */ bitjs.io.BitStream.prototype.peekBytes = function(n, movePointers) { if (n <= 0 || typeof n != typeof 1) { @@ -223,7 +223,7 @@ bitjs.io.BitStream.prototype.peekBytes = function(n, movePointers) { /** * @param {number} n The number of bytes to read. - * @return {number} The read bytes, as a number. + * @return {Uint8Array} The subarray. */ bitjs.io.BitStream.prototype.readBytes = function(n) { return this.peekBytes(n, true); diff --git a/unrar.js b/unrar.js index e7133dc..839cc3e 100644 --- a/unrar.js +++ b/unrar.js @@ -724,11 +724,11 @@ function RarCopyString(length, distance) { if(destPtr < 0){ var l = rOldBuffers.length; while(destPtr < 0){ - destPtr = rOldBuffers[--l].data.length + destPtr + destPtr = rOldBuffers[--l].data.length + destPtr; } //TODO: lets hope that it never needs to read beyond file boundaries while(length--) rBuffer.insertByte(rOldBuffers[l].data[destPtr++]); - + } if (length > distance) { while(length--) rBuffer.insertByte(rBuffer.data[destPtr++]); @@ -800,6 +800,12 @@ RarLocalFile.prototype.unrar = function() { currentBytesUnarchivedInFile += this.fileData.length; currentBytesUnarchived += this.fileData.length; + + // Create a new buffer and copy it over. + var len = this.header.packSize; + var newBuffer = new bitjs.io.ByteBuffer(len); + newBuffer.insertBytes(this.fileData); + this.fileData = newBuffer.data; } else { this.isValid = true; this.fileData = unpack(this);