mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-09-25 22:16:19 +00:00
* fix(skillscan): keep secret literals bound by kwargs, defaults and walrus in view #5648 replaced the line-oriented `name[:=]value` sweep with an AST walk that only inspected Assign/AnnAssign. A keyword argument, a parameter default and a walrus all still read as `name=value` to that sweep, so moving an embedded credential into a call silenced a HIGH-severity rule. * fix(skillscan): fold constant-built secret values back into the AST scan The pre-#5648 text sweep reported `API_KEY = "sk-" + "a1b2c3d4e5f6"`, because its value capture stopped at the first closing quote of `"sk-` and the remainder was never examined. Splitting the quotes does not change the bound value, but `ast.Constant` alone now requires it to: `+`, an adjacent literal run, and a placeholder-free f-string all bind a compile-time constant that the HIGH-severity rule no longer sees, while the same bytes in a file Python cannot parse still trip the text fallback. `_python_secret_literal` folds those forms, so the AST pass stays a precision-only change for values as well as binding forms. Runtime-composed values (`os.environ[...] + "…"`, `%`-formatting) stay unreported, which is the precision #5648 was after. * fix(skillscan): fold a literal chain without reaching the recursion limit The constant fold recursed once per operand, so a concatenation of ~1000 literals raised RecursionError on input ast.parse accepts. That exception escaped past the per-file analyzer guard in scan_skill_dir, which drops every finding collected for the file, so the deep chain cost the file its other findings as well. The fold is now a stack walk that collects operands in source order for either nesting, and the file's remaining rules keep reporting. * fix(skillscan): report credential defaults on lambda parameters _python_secret_bindings walked parameter defaults only for FunctionDef and AsyncFunctionDef, so a credential moved into a lambda default (positional or keyword-only) escaped the secret-env-assignment gate even though the line-oriented sweep this rule replaced reported it. ast.Lambda exposes the same ast.arguments structure, so add it to the tuple and pin both spellings. Addresses review feedback on #5691. --------- Co-authored-by: sxh313 <sxh313@users.noreply.github.com>