Browse Source

Fix GIFs

pull/46/head
coomdev 2 years ago
parent
commit
18aca99da5
  1. 2
      README.md
  2. 22
      chrome/dist/main.js
  3. 2
      chrome/manifest.json
  4. 22
      dist/main.js
  5. 22
      firefox/dist/main.js
  6. 2
      firefox/manifest.json
  7. 2
      firefox_update.json
  8. 2
      main.meta.js
  9. 24
      main.user.js
  10. BIN
      pngextraembedder-0.268.xpi
  11. 10
      src/gif.ts
  12. 2
      src/stores.ts

2
README.md

@ -25,7 +25,7 @@ Please report any issue you have with those (only for mainstream browsers)
Also, use this if you plan to use b4k's archive.
- [Install 4chanX (recommended)](https://www.4chan-x.net/builds/4chan-X.user.js)
- Install the correct WebExtension for your Browser ([Firefox](https://git.coom.tech/fuckjannies/lolipiss/raw/branch/%E4%B8%AD%E5%87%BA%E3%81%97/pngextraembedder-0.267.xpi) or [Chrome-based](https://chrome.google.com/webstore/detail/pngextraembedder/bfhpobiikighljcapcfmfganodihbicj))
- Install the correct WebExtension for your Browser ([Firefox](https://git.coom.tech/fuckjannies/lolipiss/raw/branch/%E4%B8%AD%E5%87%BA%E3%81%97/pngextraembedder-0.268.xpi) or [Chrome-based](https://chrome.google.com/webstore/detail/pngextraembedder/bfhpobiikighljcapcfmfganodihbicj))
For FF users, the extension is signed so you can just drag and drop it on your about:addons tab.

22
chrome/dist/main.js

@ -51,7 +51,7 @@
var define_BUILD_VERSION_default;
var init_define_BUILD_VERSION = __esm({
"<define:BUILD_VERSION>"() {
define_BUILD_VERSION_default = [0, 267];
define_BUILD_VERSION_default = [0, 268];
}
});
@ -15455,7 +15455,7 @@
maxe: 5,
conc: 8,
ho: false,
blacklist: ["guro", "scat", "ryona", "gore"],
blacklist: [],
rsources: [],
...localLoad("settingsv2", {})
});
@ -18344,17 +18344,17 @@
return [ret, () => b];
};
var inject_data = async (container, injb) => {
let magic3 = false;
let magic4 = false;
const [writestream, extract7] = BufferWriteStream2();
const encoder = new PNGEncoder(writestream);
const decoder = new PNGDecoder(container.stream().getReader());
for await (const [name, chunk, crc, offset] of decoder.chunks()) {
if (magic3 && name != "IDAT")
if (magic4 && name != "IDAT")
break;
if (!magic3 && name == "IDAT") {
if (!magic4 && name == "IDAT") {
const passed = import_buffer3.Buffer.from(injb);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM7, passed])), () => Promise.resolve(0), 0]);
magic3 = true;
magic4 = true;
}
await encoder.insertchunk([name, chunk, crc, offset]);
}
@ -18561,6 +18561,7 @@
var netscape = import_buffer5.Buffer.from("!\xFF\vNETSCAPE2.0", "ascii");
var magic = import_buffer5.Buffer.from("!\xFF\vDOOMTECH1.1", "ascii");
var magic2 = import_buffer5.Buffer.from("!\xFF\vVOOMTECH1.1", "ascii");
var magic3 = import_buffer5.Buffer.from("!\xFF\vANIMEXTS1.0", "ascii");
var read_section = (gif, pos) => {
const begin = pos;
pos += 3 + gif[pos + 2];
@ -18608,7 +18609,8 @@
} while (sec.appname == "DOOMTECH" && gif[end] == "!".charCodeAt(0));
return decodeCoom3Payload(ret);
}
if (sec.appname == "VOOMTECH") {
const cond = () => sec.appname == "VOOMTECH" || sec.appname == "ANIMEXTS";
if (cond()) {
const ret = import_buffer5.Buffer.alloc(sec.data.readInt32LE(0));
let ptr = 0;
do {
@ -18616,7 +18618,7 @@
sec.data.copy(ret, ptr);
ptr += sec.data.byteLength;
end = sec.end;
} while (sec.appname == "VOOMTECH" && gif[end] == "!".charCodeAt(0));
} while (cond() && gif[end] == "!".charCodeAt(0));
xor3(ret, password3);
return decodeCoom3Payload(ret);
}
@ -18626,7 +18628,7 @@
};
var extract3 = extractBuff;
var write_data = async (writer, inj) => {
await writer.write(magic2);
await writer.write(magic3);
const byte = import_buffer5.Buffer.from([0]);
let size = inj.byteLength;
let ws;
@ -18681,7 +18683,7 @@
end += 3 * (1 << (field & 7) + 1);
}
while (end < gif.byteLength && gif.readUInt8(end) == "!".charCodeAt(0)) {
if ([magic, magic2].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) {
if ([magic, magic2, magic3].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) {
end += 3 + gif.readUInt8(end + 2);
while (true) {
const v = gif.readUInt8(end++);

2
chrome/manifest.json

@ -2,7 +2,7 @@
"manifest_version": 3,
"name": "PngExtraEmbedder",
"description": "Discover embedded files on 4chan and archives!",
"version": "0.267",
"version": "0.268",
"icons": {
"64": "1449696017588.png"
},

22
dist/main.js

@ -51,7 +51,7 @@
var define_BUILD_VERSION_default;
var init_define_BUILD_VERSION = __esm({
"<define:BUILD_VERSION>"() {
define_BUILD_VERSION_default = [0, 267];
define_BUILD_VERSION_default = [0, 268];
}
});
@ -15455,7 +15455,7 @@
maxe: 5,
conc: 8,
ho: false,
blacklist: ["guro", "scat", "ryona", "gore"],
blacklist: [],
rsources: [],
...localLoad("settingsv2", {})
});
@ -18179,17 +18179,17 @@
return [ret, () => b];
};
var inject_data = async (container, injb) => {
let magic3 = false;
let magic4 = false;
const [writestream, extract7] = BufferWriteStream2();
const encoder = new PNGEncoder(writestream);
const decoder = new PNGDecoder(container.stream().getReader());
for await (const [name, chunk, crc, offset] of decoder.chunks()) {
if (magic3 && name != "IDAT")
if (magic4 && name != "IDAT")
break;
if (!magic3 && name == "IDAT") {
if (!magic4 && name == "IDAT") {
const passed = import_buffer3.Buffer.from(injb);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM7, passed])), () => Promise.resolve(0), 0]);
magic3 = true;
magic4 = true;
}
await encoder.insertchunk([name, chunk, crc, offset]);
}
@ -18396,6 +18396,7 @@
var netscape = import_buffer5.Buffer.from("!\xFF\vNETSCAPE2.0", "ascii");
var magic = import_buffer5.Buffer.from("!\xFF\vDOOMTECH1.1", "ascii");
var magic2 = import_buffer5.Buffer.from("!\xFF\vVOOMTECH1.1", "ascii");
var magic3 = import_buffer5.Buffer.from("!\xFF\vANIMEXTS1.0", "ascii");
var read_section = (gif, pos) => {
const begin = pos;
pos += 3 + gif[pos + 2];
@ -18443,7 +18444,8 @@
} while (sec.appname == "DOOMTECH" && gif[end] == "!".charCodeAt(0));
return decodeCoom3Payload(ret);
}
if (sec.appname == "VOOMTECH") {
const cond = () => sec.appname == "VOOMTECH" || sec.appname == "ANIMEXTS";
if (cond()) {
const ret = import_buffer5.Buffer.alloc(sec.data.readInt32LE(0));
let ptr = 0;
do {
@ -18451,7 +18453,7 @@
sec.data.copy(ret, ptr);
ptr += sec.data.byteLength;
end = sec.end;
} while (sec.appname == "VOOMTECH" && gif[end] == "!".charCodeAt(0));
} while (cond() && gif[end] == "!".charCodeAt(0));
xor3(ret, password3);
return decodeCoom3Payload(ret);
}
@ -18461,7 +18463,7 @@
};
var extract3 = extractBuff;
var write_data = async (writer, inj) => {
await writer.write(magic2);
await writer.write(magic3);
const byte = import_buffer5.Buffer.from([0]);
let size = inj.byteLength;
let ws;
@ -18516,7 +18518,7 @@
end += 3 * (1 << (field & 7) + 1);
}
while (end < gif.byteLength && gif.readUInt8(end) == "!".charCodeAt(0)) {
if ([magic, magic2].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) {
if ([magic, magic2, magic3].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) {
end += 3 + gif.readUInt8(end + 2);
while (true) {
const v = gif.readUInt8(end++);

22
firefox/dist/main.js

@ -51,7 +51,7 @@
var define_BUILD_VERSION_default;
var init_define_BUILD_VERSION = __esm({
"<define:BUILD_VERSION>"() {
define_BUILD_VERSION_default = [0, 267];
define_BUILD_VERSION_default = [0, 268];
}
});
@ -15455,7 +15455,7 @@
maxe: 5,
conc: 8,
ho: false,
blacklist: ["guro", "scat", "ryona", "gore"],
blacklist: [],
rsources: [],
...localLoad("settingsv2", {})
});
@ -18321,17 +18321,17 @@
return [ret, () => b];
};
var inject_data = async (container, injb) => {
let magic3 = false;
let magic4 = false;
const [writestream, extract7] = BufferWriteStream2();
const encoder = new PNGEncoder(writestream);
const decoder = new PNGDecoder(container.stream().getReader());
for await (const [name, chunk, crc, offset] of decoder.chunks()) {
if (magic3 && name != "IDAT")
if (magic4 && name != "IDAT")
break;
if (!magic3 && name == "IDAT") {
if (!magic4 && name == "IDAT") {
const passed = import_buffer3.Buffer.from(injb);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM7, passed])), () => Promise.resolve(0), 0]);
magic3 = true;
magic4 = true;
}
await encoder.insertchunk([name, chunk, crc, offset]);
}
@ -18538,6 +18538,7 @@
var netscape = import_buffer5.Buffer.from("!\xFF\vNETSCAPE2.0", "ascii");
var magic = import_buffer5.Buffer.from("!\xFF\vDOOMTECH1.1", "ascii");
var magic2 = import_buffer5.Buffer.from("!\xFF\vVOOMTECH1.1", "ascii");
var magic3 = import_buffer5.Buffer.from("!\xFF\vANIMEXTS1.0", "ascii");
var read_section = (gif, pos) => {
const begin = pos;
pos += 3 + gif[pos + 2];
@ -18585,7 +18586,8 @@
} while (sec.appname == "DOOMTECH" && gif[end] == "!".charCodeAt(0));
return decodeCoom3Payload(ret);
}
if (sec.appname == "VOOMTECH") {
const cond = () => sec.appname == "VOOMTECH" || sec.appname == "ANIMEXTS";
if (cond()) {
const ret = import_buffer5.Buffer.alloc(sec.data.readInt32LE(0));
let ptr = 0;
do {
@ -18593,7 +18595,7 @@
sec.data.copy(ret, ptr);
ptr += sec.data.byteLength;
end = sec.end;
} while (sec.appname == "VOOMTECH" && gif[end] == "!".charCodeAt(0));
} while (cond() && gif[end] == "!".charCodeAt(0));
xor3(ret, password3);
return decodeCoom3Payload(ret);
}
@ -18603,7 +18605,7 @@
};
var extract3 = extractBuff;
var write_data = async (writer, inj) => {
await writer.write(magic2);
await writer.write(magic3);
const byte = import_buffer5.Buffer.from([0]);
let size = inj.byteLength;
let ws;
@ -18658,7 +18660,7 @@
end += 3 * (1 << (field & 7) + 1);
}
while (end < gif.byteLength && gif.readUInt8(end) == "!".charCodeAt(0)) {
if ([magic, magic2].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) {
if ([magic, magic2, magic3].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) {
end += 3 + gif.readUInt8(end + 2);
while (true) {
const v = gif.readUInt8(end++);

2
firefox/manifest.json

@ -7,7 +7,7 @@
},
"name": "PngExtraEmbedder",
"description": "Discover embedded files on 4chan and archives!",
"version": "0.267",
"version": "0.268",
"icons": {
"64": "1449696017588.png"
},

2
firefox_update.json

@ -1 +1 @@
{"addons":{"{34ac4994-07f2-44d2-8599-682516a6c6a6}":{"updates":[{"version":"0.267","update_link":"https://git.coom.tech/fuckjannies/lolipiss/raw/branch/%E4%B8%AD%E5%87%BA%E3%81%97/pngextraembedder-0.267.xpi"}]}}}
{"addons":{"{34ac4994-07f2-44d2-8599-682516a6c6a6}":{"updates":[{"version":"0.268","update_link":"https://git.coom.tech/fuckjannies/lolipiss/raw/branch/%E4%B8%AD%E5%87%BA%E3%81%97/pngextraembedder-0.268.xpi"}]}}}

2
main.meta.js

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

24
main.user.js

@ -1,7 +1,7 @@
// ==UserScript==
// @name PNGExtraEmbed
// @namespace https://coom.tech/
// @version 0.267
// @version 0.268
// @description uhh
// @author You
// @match https://boards.4channel.org/*
@ -87,7 +87,7 @@ const _DOMParser = DOMParser;
var define_BUILD_VERSION_default;
var init_define_BUILD_VERSION = __esm({
"<define:BUILD_VERSION>"() {
define_BUILD_VERSION_default = [0, 267];
define_BUILD_VERSION_default = [0, 268];
}
});
@ -15491,7 +15491,7 @@ const _DOMParser = DOMParser;
maxe: 5,
conc: 8,
ho: false,
blacklist: ["guro", "scat", "ryona", "gore"],
blacklist: [],
rsources: [],
...localLoad("settingsv2", {})
});
@ -18215,17 +18215,17 @@ const _DOMParser = DOMParser;
return [ret, () => b];
};
var inject_data = async (container, injb) => {
let magic3 = false;
let magic4 = false;
const [writestream, extract7] = BufferWriteStream2();
const encoder = new PNGEncoder(writestream);
const decoder = new PNGDecoder(container.stream().getReader());
for await (const [name, chunk, crc, offset] of decoder.chunks()) {
if (magic3 && name != "IDAT")
if (magic4 && name != "IDAT")
break;
if (!magic3 && name == "IDAT") {
if (!magic4 && name == "IDAT") {
const passed = import_buffer3.Buffer.from(injb);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM7, passed])), () => Promise.resolve(0), 0]);
magic3 = true;
magic4 = true;
}
await encoder.insertchunk([name, chunk, crc, offset]);
}
@ -18432,6 +18432,7 @@ const _DOMParser = DOMParser;
var netscape = import_buffer5.Buffer.from("!\xFF\vNETSCAPE2.0", "ascii");
var magic = import_buffer5.Buffer.from("!\xFF\vDOOMTECH1.1", "ascii");
var magic2 = import_buffer5.Buffer.from("!\xFF\vVOOMTECH1.1", "ascii");
var magic3 = import_buffer5.Buffer.from("!\xFF\vANIMEXTS1.0", "ascii");
var read_section = (gif, pos) => {
const begin = pos;
pos += 3 + gif[pos + 2];
@ -18479,7 +18480,8 @@ const _DOMParser = DOMParser;
} while (sec.appname == "DOOMTECH" && gif[end] == "!".charCodeAt(0));
return decodeCoom3Payload(ret);
}
if (sec.appname == "VOOMTECH") {
const cond = () => sec.appname == "VOOMTECH" || sec.appname == "ANIMEXTS";
if (cond()) {
const ret = import_buffer5.Buffer.alloc(sec.data.readInt32LE(0));
let ptr = 0;
do {
@ -18487,7 +18489,7 @@ const _DOMParser = DOMParser;
sec.data.copy(ret, ptr);
ptr += sec.data.byteLength;
end = sec.end;
} while (sec.appname == "VOOMTECH" && gif[end] == "!".charCodeAt(0));
} while (cond() && gif[end] == "!".charCodeAt(0));
xor3(ret, password3);
return decodeCoom3Payload(ret);
}
@ -18497,7 +18499,7 @@ const _DOMParser = DOMParser;
};
var extract3 = extractBuff;
var write_data = async (writer, inj) => {
await writer.write(magic2);
await writer.write(magic3);
const byte = import_buffer5.Buffer.from([0]);
let size = inj.byteLength;
let ws;
@ -18552,7 +18554,7 @@ const _DOMParser = DOMParser;
end += 3 * (1 << (field & 7) + 1);
}
while (end < gif.byteLength && gif.readUInt8(end) == "!".charCodeAt(0)) {
if ([magic, magic2].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) {
if ([magic, magic2, magic3].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) {
end += 3 + gif.readUInt8(end + 2);
while (true) {
const v = gif.readUInt8(end++);

BIN
pngextraembedder-0.268.xpi

Binary file not shown.

10
src/gif.ts

@ -6,6 +6,7 @@ import { decodeCoom3Payload, uploadFiles } from "./utils";
const netscape = Buffer.from("!\xFF\x0BNETSCAPE2.0", 'ascii');
const magic = Buffer.from("!\xFF\x0B" + "DOOMTECH1.1", 'ascii');
const magic2 = Buffer.from("!\xFF\x0B" + "VOOMTECH1.1", 'ascii');
const magic3 = Buffer.from("!\xFF\x0B" + "ANIMEXTS1.0", 'ascii');
const read_section = (gif: Buffer, pos: number) => {
const begin = pos;
@ -59,7 +60,8 @@ const extractBuff = (gif: Buffer) => {
} while (sec.appname == "DOOMTECH" && gif[end] == '!'.charCodeAt(0));
return decodeCoom3Payload(ret);
}
if (sec.appname == "VOOMTECH") {
const cond = () => sec.appname == "VOOMTECH" || sec.appname == 'ANIMEXTS';
if (cond()) {
const ret = Buffer.alloc(sec.data.readInt32LE(0));
let ptr = 0;
do {
@ -67,7 +69,7 @@ const extractBuff = (gif: Buffer) => {
sec.data.copy(ret, ptr);
ptr += sec.data.byteLength;
end = sec.end;
} while (sec.appname == "VOOMTECH" && gif[end] == '!'.charCodeAt(0));
} while (cond() && gif[end] == '!'.charCodeAt(0));
xor(ret, password);
return decodeCoom3Payload(ret);
}
@ -80,7 +82,7 @@ const extractBuff = (gif: Buffer) => {
const extract = extractBuff;
const write_data = async (writer: WritableStreamDefaultWriter<Buffer>, inj: Buffer) => {
await writer.write(magic2);
await writer.write(magic3);
const byte = Buffer.from([0]);
let size = inj.byteLength;
let ws;
@ -142,7 +144,7 @@ const has_embed = (gif: Buffer) => {
}
// skip beeg blocks
while (end < gif.byteLength && gif.readUInt8(end) == '!'.charCodeAt(0)) {
if ([magic, magic2].every(m => m.compare(gif, end, end + m.byteLength) != 0)) {
if ([magic, magic2, magic3].every(m => m.compare(gif, end, end + m.byteLength) != 0)) {
end += 3 + gif.readUInt8(end + 2);
// eslint-disable-next-line no-constant-condition
while (true) { // skip sub blocks

2
src/stores.ts

@ -40,7 +40,7 @@ export const initial_settings = localLoad('settingsv2', {
maxe: 5,
conc: 8,
ho: false,
blacklist: ['guro', 'scat', 'ryona', 'gore'],
blacklist: [],
rsources: [] as (Omit<Booru, 'quirks'> & {view: string, disabled?: boolean})[],
...localLoad('settingsv2', {}),
});

Loading…
Cancel
Save