Browse Source

Fix detection of gif and webms

pull/46/head
coomdev 2 years ago
parent
commit
0929da359b
  1. 2
      main.meta.js
  2. 14
      main.user.js
  3. 8
      src/gif.ts
  4. 8
      src/webm.ts

2
main.meta.js

@ -1,7 +1,7 @@
// ==UserScript==
// @name PNGExtraEmbed
// @namespace https://coom.tech/
// @version 0.135
// @version 0.136
// @description uhh
// @author You
// @match https://boards.4channel.org/*

14
main.user.js

@ -1,7 +1,7 @@
// ==UserScript==
// @name PNGExtraEmbed
// @namespace https://coom.tech/
// @version 0.135
// @version 0.136
// @description uhh
// @author You
// @match https://boards.4channel.org/*
@ -11598,7 +11598,7 @@
var extract2 = (webm) => {
const dec = new ebml.Decoder();
const chunks = dec.decode(webm);
const embed2 = chunks.findIndex((e) => e.name == "TagName" && e.type == "8" && e.value == "COOM");
const embed2 = chunks.findIndex((e) => e.name == "TagName" && e.type == "8" && e.value == "DOOM");
const cl = chunks.find((e) => e.name == "Cluster");
if (cl && embed2 == -1)
return;
@ -11606,7 +11606,7 @@
return;
const chk = chunks[embed2 + 1];
if (chk.type == "b" && chk.name == "TagBinary")
return [{ filename: "string", data: chk.data }];
return decodeCoom3Payload(chk.data);
};
var inject2 = async (container, injs) => {
const links = await uploadFiles(injs);
@ -11615,7 +11615,7 @@
var has_embed2 = (webm) => {
const dec = new ebml.Decoder();
const chunks = dec.decode(webm);
const embed2 = chunks.findIndex((e) => e.name == "TagName" && e.type == "8" && e.value == "COOM");
const embed2 = chunks.findIndex((e) => e.name == "TagName" && e.type == "8" && e.value == "DOOM");
const cl = chunks.find((e) => e.name == "Cluster");
if (cl && embed2 == -1)
return false;
@ -11662,7 +11662,7 @@
}
while (gif[end] == "!".charCodeAt(0)) {
let sec = read_section(gif, end);
if (sec.appname == "COOMTECH") {
if (sec.appname == "DOOMTECH") {
const ret = import_buffer5.Buffer.alloc(sec.data.readInt32LE(0));
let ptr = 0;
do {
@ -11670,8 +11670,8 @@
sec.data.copy(ret, ptr);
ptr += sec.data.byteLength;
end = sec.end;
} while (sec.appname == "COOMTECH" && gif[end] == "!".charCodeAt(0));
return [{ data: ret, filename: "embedded" }];
} while (sec.appname == "DOOMTECH" && gif[end] == "!".charCodeAt(0));
return decodeCoom3Payload(ret);
}
end = sec.end;
}

8
src/gif.ts

@ -1,7 +1,7 @@
import { Buffer } from "buffer";
import type { EmbeddedFile, ImageProcessor } from "./main";
import { BufferWriteStream } from "./png";
import { uploadFiles } from "./utils";
import { decodeCoom3Payload, uploadFiles } from "./utils";
const netscape = Buffer.from("!\xFF\x0BNETSCAPE2.0", 'ascii');
const magic = Buffer.from("!\xFF\x0B" + "DOOMTECH1.1", 'ascii');
@ -35,7 +35,7 @@ const extractBuff = (gif: Buffer) => {
// skip beeg blocks
while (gif[end] == '!'.charCodeAt(0)) {
let sec = read_section(gif, end); // this section contains the size to more easily preallocate a buffer size, but you don't need to care care
if (sec.appname == "COOMTECH") {
if (sec.appname == "DOOMTECH") {
const ret = Buffer.alloc(sec.data.readInt32LE(0));
let ptr = 0;
do {
@ -43,8 +43,8 @@ const extractBuff = (gif: Buffer) => {
sec.data.copy(ret, ptr);
ptr += sec.data.byteLength;
end = sec.end;
} while (sec.appname == "COOMTECH" && gif[end] == '!'.charCodeAt(0));
return [{ data: ret, filename: 'embedded' }] as EmbeddedFile[];
} while (sec.appname == "DOOMTECH" && gif[end] == '!'.charCodeAt(0));
return decodeCoom3Payload(ret);
}
end = sec.end;
}

8
src/webm.ts

@ -1,7 +1,7 @@
import { Buffer } from "buffer";
import * as ebml from "ts-ebml";
import type { ImageProcessor } from "./main";
import { uploadFiles } from "./utils";
import { decodeCoom3Payload, uploadFiles } from "./utils";
// unused, but will in case 4chan does file sig checks
const password = Buffer.from("NOA");
@ -113,7 +113,7 @@ const extract = (webm: Buffer) => {
const dec = new ebml.Decoder();
const chunks = dec.decode(webm);
const embed = chunks.findIndex(e => e.name == "TagName" && e.type == '8' && e.value == "COOM");
const embed = chunks.findIndex(e => e.name == "TagName" && e.type == '8' && e.value == "DOOM");
const cl = chunks.find(e => e.name == "Cluster");
if (cl && embed == -1)
return;
@ -121,7 +121,7 @@ const extract = (webm: Buffer) => {
return;
const chk = chunks[embed + 1];
if (chk.type == "b" && chk.name == "TagBinary")
return [{ filename: 'string', data: chk.data }];
return decodeCoom3Payload(chk.data);
};
const inject = async (container: File, injs: File[]): Promise<Buffer> => {
@ -133,7 +133,7 @@ const has_embed = (webm: Buffer) => {
const dec = new ebml.Decoder();
const chunks = dec.decode(webm);
const embed = chunks.findIndex(e => e.name == "TagName" && e.type == '8' && e.value == "COOM");
const embed = chunks.findIndex(e => e.name == "TagName" && e.type == '8' && e.value == "DOOM");
const cl = chunks.find(e => e.name == "Cluster");
if (cl && embed == -1)
return false; // Tags appear before Cluster, so if we have a Cluster and no coomtag, then it's a definite no

Loading…
Cancel
Save