Browse Source

Merge branch 'n1073645-debExtractor'

n1474335 5 năm trước cách đây
mục cha
commit
a770d09687
1 tập tin đã thay đổi với 52 bổ sung2 xóa
  1. 52 2
      src/core/lib/FileSignatures.mjs

+ 52 - 2
src/core/lib/FileSignatures.mjs

@@ -1724,6 +1724,25 @@ export const FILE_SIGNATURES = {
             },
             extractor: null
         },
+        {
+            name: "Jar Archive",
+            extension: "jar",
+            mime: "application/java-archive",
+            description: "",
+            signature: {
+                0: 0x50,
+                1: 0x4B,
+                2: 0x03,
+                3: 0x04,
+                4: 0x14,
+                5: 0x00,
+                6: 0x08,
+                7: 0x00,
+                8: 0x08,
+                9: 0x00
+            },
+            extractor: extractZIP
+        },
         {
             name: "lzop compressed",
             extension: "lzop,lzo",
@@ -1742,7 +1761,7 @@ export const FILE_SIGNATURES = {
             extractor: extractLZOP
         },
         {
-            name: "Linux deb",
+            name: "Linux deb package",
             extension: "deb",
             mime: "application/vnd.debian.binary-package",
             description: "",
@@ -1755,7 +1774,7 @@ export const FILE_SIGNATURES = {
                 5: 0x68,
                 6: 0x3e
             },
-            extractor: null
+            extractor: extractDEB
         },
         {
             name: "Apple Disk Image",
@@ -3448,6 +3467,37 @@ export function extractXZ(bytes, offset) {
 }
 
 
+/**
+ * DEB extractor.
+ *
+ * @param {Uint8Array} bytes
+ * @param {Number} offset
+ */
+export function extractDEB(bytes, offset) {
+    const stream = new Stream(bytes.slice(offset));
+
+    // Move past !<arch>
+    stream.moveForwardsBy(8);
+    while (stream.hasMore()) {
+
+        // Move to size field.
+        stream.moveForwardsBy(48);
+        let fsize= "";
+
+        // Convert size to a usable number.
+        for (const elem of stream.getBytes(10)) {
+            fsize += String.fromCharCode(elem);
+        }
+        fsize = parseInt(fsize.trim(), 10);
+
+        // Move past `\n
+        stream.moveForwardsBy(2);
+        stream.moveForwardsBy(fsize);
+    }
+    return stream.carve();
+}
+
+
 /**
  * ELF extractor.
  *