fix parser onedrive url decoding and bump vulnerable deps

This commit is contained in:
q
2026-04-22 02:02:43 +08:00
parent fd6a3f5929
commit 110a9beda4
3 changed files with 36 additions and 7 deletions

View File

@@ -59,12 +59,12 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- Versions --> <!-- Versions -->
<vertx.version>4.5.22</vertx.version> <vertx.version>4.5.24</vertx.version>
<org.reflections.version>0.10.2</org.reflections.version> <org.reflections.version>0.10.2</org.reflections.version>
<lombok.version>1.18.38</lombok.version> <lombok.version>1.18.38</lombok.version>
<slf4j.version>2.0.5</slf4j.version> <slf4j.version>2.0.16</slf4j.version>
<commons-lang3.version>3.18.0</commons-lang3.version> <commons-lang3.version>3.18.0</commons-lang3.version>
<jackson.version>2.14.2</jackson.version> <jackson.version>2.18.6</jackson.version>
<logback.version>1.5.19</logback.version> <logback.version>1.5.19</logback.version>
<junit.version>4.13.2</junit.version> <junit.version>4.13.2</junit.version>
</properties> </properties>

View File

@@ -99,7 +99,8 @@ public class PodTool extends PanBase {
Matcher matcher1 = Matcher matcher1 =
Pattern.compile("\"downloadUrl\":\"(?<url>https?://[^\s\"]+)").matcher(body); Pattern.compile("\"downloadUrl\":\"(?<url>https?://[^\s\"]+)").matcher(body);
if (matcher1.find()) { if (matcher1.find()) {
complete(matcher1.group("url")); // 响应体是 JSON 文本URL 中的 '&' 被转义为 \u0026需要反转义
complete(unescapeJsonUnicode(matcher1.group("url")));
} else { } else {
fail(); fail();
} }
@@ -134,6 +135,34 @@ public class PodTool extends PanBase {
throw new RuntimeException("URL匹配失败"); throw new RuntimeException("URL匹配失败");
} }
/**
* 反转义 JSON 响应文本中残留的 Unicode 转义序列(主要是 \u0026 -> &)。
* 主分支通过正则直接从 JSON 原文抠 URL未经过 JSON 解析器,需要手动还原。
*/
private String unescapeJsonUnicode(String s) {
if (s == null || s.indexOf("\\u") < 0) {
return s;
}
StringBuilder sb = new StringBuilder(s.length());
int i = 0;
while (i < s.length()) {
char c = s.charAt(i);
if (c == '\\' && i + 5 < s.length() && s.charAt(i + 1) == 'u') {
try {
int cp = Integer.parseInt(s.substring(i + 2, i + 6), 16);
sb.append((char) cp);
i += 6;
continue;
} catch (NumberFormatException ignored) {
// 非法转义按原样保留
}
}
sb.append(c);
i++;
}
return sb.toString();
}
private String matcherToken(String html) { private String matcherToken(String html) {
// 正则表达式来匹配 inputElem.value 中的 Token // 正则表达式来匹配 inputElem.value 中的 Token

View File

@@ -26,13 +26,13 @@
<packageDirectory>${project.basedir}/web-service/target/package</packageDirectory> <packageDirectory>${project.basedir}/web-service/target/package</packageDirectory>
<!-- Vert.x 4.5.24 已包含安全修复,无需单独指定 Netty 版本 --> <!-- Vert.x 4.5.24 已包含安全修复,无需单独指定 Netty 版本 -->
<vertx.version>4.5.14</vertx.version> <vertx.version>4.5.24</vertx.version>
<org.reflections.version>0.10.2</org.reflections.version> <org.reflections.version>0.10.2</org.reflections.version>
<lombok.version>1.18.38</lombok.version> <lombok.version>1.18.38</lombok.version>
<slf4j.version>2.0.16</slf4j.version> <slf4j.version>2.0.16</slf4j.version>
<commons-lang3.version>3.18.0</commons-lang3.version> <commons-lang3.version>3.18.0</commons-lang3.version>
<commons-beanutils2.version>2.0.0</commons-beanutils2.version> <commons-beanutils2.version>2.0.0</commons-beanutils2.version>
<jackson.version>2.18.2</jackson.version> <jackson.version>2.18.6</jackson.version>
<!-- Logback 最新稳定版 --> <!-- Logback 最新稳定版 -->
<logback.version>1.5.18</logback.version> <logback.version>1.5.18</logback.version>
<junit.version>4.13.2</junit.version> <junit.version>4.13.2</junit.version>