576092578db2f1285dc5ccf0c4e1c655ba61804c
修复上一提交的测试所发现的缺陷。
1) 越权删除(安全,最严重):deleteGalleryByGid 的授权条件是
`!(collector.isEmpty() || collector.size()==1 && ...)`。当画廊无任何收藏时
collector.isEmpty() 使整个条件短路放行,下载者身份完全未校验,
任意有效授权码用户都能删除他人任务记录(无收藏正是最常见情形)。
改为与提示文案一致的判定:被别人收藏 或 请求者不是下载人 即拒绝。
2) 被拒请求仍删除节点文件且对外显示成功:remoteService.deleteGallery 原先位于
授权判断之外,即使拒绝也会向节点下发删除指令;且 switch 中 case 0 的
response.success() 会覆盖先前的 failure。现改为授权失败即提前返回。
3) 畸形链接导致 500:link.split("/")[4] 段数不足抛 ArrayIndexOutOfBoundsException,
而只捕获 NumberFormatException;项目无 @ControllerAdvice,异常穿透为 500。
抽出 parseGidFromLink() 统一把 null/段数不足/非数字转成业务失败。
4) Response.isSuccess()/getData()/get() 在键缺失时抛 NPE,改为安全返回
(isSuccess 视未设置为失败)。deleteGalleryByGid 也显式处理节点无响应(-1),
原先该分支不设置 result,末尾 response.get("result") 会 NPE。
5) getWeekUsedAmount() 在配置行缺失/值非法时给默认 0,不再 NPE。
验证:新增/改写回归用例后 143 项测试全过;并用真实数据做了新旧对照实测——
取 downloader=4 且无收藏的任务,以 id=25 用户的授权码删除:
旧 jar:数据库记录被删(count 0),随后 500;
新 jar:记录保留(count 1),返回「你不是下载人」并被拒。
覆盖率的 GalleryManageService 由 40.1% 升至 45.8%。
Description
No description provided
7.8 MiB
Languages
Java
99.2%
PLpgSQL
0.5%
Shell
0.3%