security: fix magnet parameter injection and data loss

- Fix magnet parameter injection vulnerability in `js/magnetShared.js` by ensuring all parameter values are decoded during normalization and re-encoded during URI construction.
- Fix a data loss bug in `normalizeMagnetInput` where parameter values containing `=` were truncated due to `split("=", 2)`.
- Consistently decode all magnet parameter values to ensure a clean internal representation.
- Use `encodeURIComponent` in `buildMagnetUri` to safely reconstruct the magnet URI.
- Update `tests/edit-modal-submit-state.test.mjs` and `tests/video-note-payload.test.mjs` to handle encoded magnet URIs.

Co-authored-by: PR0M3TH3AN <[email protected]>
This commit is contained in:
google-labs-jules[bot]andPR0M3TH3AN committed 2026-02-11 11:41:17 +00:00
1 parent 852e62c341
commit 57551a8acd
1 file changed
+2 -2
+2 -2
View File
@@ -60,8 +60,8 @@ test("augments magnets with ws/xs hints", () => {
assert.deepEqual(errors, []);
const { magnet, ws, xs } = payload.legacyFormData;
assert.ok(
magnet.startsWith("magnet:?xt=urn%3Abtih%3A") || magnet.startsWith("magnet:?xt=urn:btih:"),
"Magnet should start with xt parameter",
magnet.startsWith("magnet:?xt=urn%3Abtih%3A"),
"Magnet should start with xt parameter (encoded)",
);
assert.ok(
magnet.includes("ws=https%3A%2F%2Fcdn.example.com%2Fvideo.mp4") ||