Skip to content

Commit aff02d2

Browse files
committed
fix: 修复 Base64 解析逻辑
1 parent c10b0f6 commit aff02d2

3 files changed

Lines changed: 17 additions & 2 deletions

File tree

backend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "sub-store",
3-
"version": "2.36.2",
3+
"version": "2.36.3",
44
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and Shadowrocket.",
55
"main": "src/main.js",
66
"packageManager": "pnpm@11.0.9",

backend/src/core/proxy-utils/preprocessors/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ function Base64Encoded() {
6767

6868
const test = function (raw) {
6969
return (
70+
Base64.isValid(raw) &&
7071
!/^\w+:\/\/\w+/im.test(raw) &&
7172
keys.some((k) => raw.indexOf(k) !== -1)
7273
);
@@ -89,7 +90,7 @@ function fallbackBase64Encoded() {
8990
const name = 'Fallback Base64 Pre-processor';
9091

9192
const test = function (raw) {
92-
return true;
93+
return Base64.isValid(raw);
9394
};
9495
const parse = function (raw) {
9596
const decoded = Base64.decode(raw);

backend/src/test/proxy-preprocessors/preprocessors.spec.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,13 @@ describe('Proxy preprocessors', function () {
8484

8585
expect(processor.test(raw)).to.equal(false);
8686
});
87+
88+
it('ignores invalid base64 containing an encoded proxy prefix', function () {
89+
const processor = getPreprocessor('Base64 Pre-processor');
90+
const raw = `🔥${Base64.encode('vmess://test')}`;
91+
92+
expect(processor.test(raw)).to.equal(false);
93+
});
8794
});
8895

8996
describe('Fallback Base64 preprocessor', function () {
@@ -97,6 +104,13 @@ describe('Proxy preprocessors', function () {
97104
expect(processor.parse(encoded)).to.equal(decoded);
98105
expect(processor.parse(invalid)).to.equal(invalid);
99106
});
107+
108+
it('ignores invalid base64 that decodes to a proxy prefix', function () {
109+
const processor = getPreprocessor('Fallback Base64 Pre-processor');
110+
const raw = `🔥${Base64.encode('vmess://test')}`;
111+
112+
expect(processor.test(raw)).to.equal(false);
113+
});
100114
});
101115

102116
describe('Clash preprocessor', function () {

0 commit comments

Comments
 (0)