Ver Fonte

Update zip.js

Lutz Roeder há 1 ano atrás
pai
commit
a758db1071
1 ficheiros alterados com 5 adições e 5 exclusões
  1. 5 5
      source/zip.js

+ 5 - 5
source/zip.js

@@ -38,14 +38,15 @@ zip.Archive = class {
                 const seek = (signature, size) => {
                     signature = Array.from(signature, (c) => c.charCodeAt(0));
                     let position = stream.length;
-                    do {
+                    const offset = Math.max(stream.length - 0x1000000, 0);
+                    while (position > offset) {
                         position = Math.max(0, position - 66000);
                         stream.seek(position);
                         const length = Math.min(stream.length - position, 66000 + size);
                         const buffer = stream.read(length);
-                        for (let i = buffer.length - size; i >= 0; i--) {
-                            if (signature[0] === buffer[i]     && signature[1] === buffer[i + 1] &&
-                                signature[2] === buffer[i + 2] && signature[3] === buffer[i + 3]) {
+                        for (let i = length - size; i >= 0; i--) {
+                            i = buffer.lastIndexOf(signature[0], i);
+                            if (i !== -1 && signature[1] === buffer[i + 1] && signature[2] === buffer[i + 2] && signature[3] === buffer[i + 3]) {
                                 stream.seek(position + i);
                                 return new zip.BinaryReader(buffer.subarray(i, i + size));
                             }
@@ -54,7 +55,6 @@ zip.Archive = class {
                             break;
                         }
                     }
-                    while (position > 0);
                     return null;
                 };
                 const read = (signature, size) => {