test(wave134): 贴纸引擎纯逻辑抽离 + 113单测 #1048
Reference in New Issue
Block a user
Delete Branch "test/wave134-sticker-engine-pure"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
变更内容
新增纯逻辑模块
sticker_engine_pure.py从
sticker_engine.py中抽离所有纯函数,0 FFmpeg 依赖:safe_float/safe_int/safe_boolestimate_sticker_size/estimate_text_sizecalculate_fade_out_start/calculate_end_time/has_time_rangebuild_scale_filter/build_opacity_filter/build_image_fade_filters/build_enable_exprescape_drawtext_text/build_drawtext_alpha_expr/build_stroke_params/build_shadow_paramssort_stickers_by_z_index/filter_enabled_stickers/count_sticker_typesbuild_overlay_position/build_pre_filter_labelvalidate_image_sticker/validate_text_sticker113个单元测试
向后兼容
sticker_engine.py未修改,不影响现有功能纯函数,无外部依赖,本地113测全绿。
代码审查结果 - PR #1048
⚠️ 问题(1个需要修改)
validate_image_sticker函数中存在校验逻辑漏洞。safe_float获取参数,当传入非法字符串(如"abc")时,safe_float返回None。后续的校验逻辑if opacity is not None and ...会直接跳过校验,导致非法输入被判定为合法(返回 True)。如果后续流程直接使用原始值,会导致类型错误或生成错误的 FFmpeg 命令。safe_float返回None但原始值存在时,应报错。例如:validate_text_sticker中的duration校验(第515行左右)也存在同样问题。💡 建议(1个可选)
escape_drawtext_text函数转义字符较少。:和'。在 FFmpegdrawtext滤镜中,根据上下文不同,\(反斜杠)、[、]、%等字符也可能具有特殊含义。如果文本内容包含这些字符,可能导致滤镜解析失败。建议根据实际调用场景(是否被引号包裹)补充转义逻辑,或至少补充对\的处理。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题
🤖 由 AI 代码审查机器人自动生成 | 2026-07-28 01:22:22 | 模型:
🚀 预览环境已部署
🗑️ 预览环境已清理
PR #1048 已关闭或合并,对应的预览环境已被清理。