Skip to content

fix(core): 修复参数名括号不配对导致参数解析抛异常 - #159

Open
MindOfqc wants to merge 1 commit into
jeequan:devfrom
MindOfqc:fix/param-name-bracket
Open

MindOfqc wants to merge 1 commit into
jeequan:devfrom
MindOfqc:fix/param-name-bracket

Conversation

@MindOfqc

Copy link
Copy Markdown

问题与验收标准

  • 关联 Issue(小修复可直接描述):无,直接描述
  • 问题 / 需求与预期结果:RequestKitBean#reqParam2JSON() 仅凭参数名是否包含 [ 就按 主键[子键] 语法解析,随后用 name.indexOf("]") 作为 substring 的结束下标(jeepay-core/src/main/java/com/jeequan/jeepay/core/beans/RequestKitBean.java:128-129)。当参数名含 [ 但没有 ](例如 ?ps[abc=1),或 ] 出现在 [ 之前(例如 ?a]b[=2)时,indexOf("]") 返回 -1 或小于起始下标,substring 抛 StringIndexOutOfBoundsException,整个请求以 500 失败。预期:括号不配对的名称按普通键原样保留,不影响其他参数的解析。该方法是 getReqParamJSON()(同文件 143-150 行)的唯一取值入口,被 AbstractCtrl#getReqParamJSON() 及全部控制器的分页、排序、金额等取值复用。
  • 本次范围与不涉及的内容:只改参数名解析的分支条件;不改 String[] 多值拼接分支、不改 JSON 请求体分支。

改动与兼容性

  • 实现要点:把守卫从 !name.contains("[") 改为 !name.contains("[") || name.indexOf("]") < name.indexOf("["),只有形如 xxx[yyy] 的名称才进入对象属性解析。
  • 配套前端 / Skills PR 或版本(无则写不涉及):不涉及
  • API、权限、签名、数据库 / 配置影响与升级、回滚说明:不涉及。行为变化仅限此前会抛异常返回 500 的畸形参数名,现在改为原样保留。

验证

  • 命令 / 人工步骤与结果:
    • 修复前:mvn -o -pl jeepay-core -Dtest=RequestKitBeanMalformedParamTest test → Tests run: 2, Failures: 2,两条均为 AssertionFailedError: Unexpected exception thrown: java.lang.StringIndexOutOfBoundsException: Range [3, -1) out of bounds for length 6 / Range [4, 1) out of bounds for length 4。
    • 修复后:mvn -o -pl jeepay-core -Dtest='RequestKitBeanMalformedParamTest,FastJsonCompatSmokeTest,LogSanitizerTest' test → Tests run: 12, Failures: 0, Errors: 0, Skipped: 0。
  • 新增回归测试(修复前失败、修复后通过):RequestKitBeanMalformedParamTest 用 HttpServletRequest 动态代理构造非 JSON 请求,分别覆盖 ps[abc(缺 ])与 a]b[(] 在 [ 之前)两种参数名,断言解析不抛异常且键值被保留。修复前两条断言失败,修复后通过。
  • 未验证项、已知风险和原因:未运行 jeepay-core 之外的模块与真实支付链路;未通过真实网关/浏览器复现 500。文中命令均为本地离线 Maven 执行结果,不代表真实支付验收。

合并前核对

  • 普通贡献目标为 dev;稳定热修复到 master 并关联回同步 dev 的计划 / PR
  • 范围、验收标准和相关文档已对齐;不兼容变化已明确标注
  • 相关测试通过,未提交凭据、真实商户数据或敏感日志
  • 维护者评审意见已处理,必需 CI 检查通过
  • 若为发布 PR,已列出前后端版本、升级 / 回滚步骤及联调结果

Prepared with an AI coding agent.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant