Skip to content

fix: add blur radius limit to prevent shadow crash#646

Merged
18202781743 merged 1 commit into
linuxdeepin:masterfrom
18202781743:master
Jul 10, 2026
Merged

fix: add blur radius limit to prevent shadow crash#646
18202781743 merged 1 commit into
linuxdeepin:masterfrom
18202781743:master

Conversation

@18202781743

Copy link
Copy Markdown
Contributor
  1. Add blur radius validation in doBoxShdowBlur to return early when
    radius exceeds 100
  2. Add blur radius pre-check in getRawShadow to reject invalid values
    before processing
  3. Prevent potential memory crash caused by excessively large shadow
    blur radius values

Log: Added shadow blur radius limit to prevent application crash

Influence:

  1. Test shadow rendering with various blur radius values (0, 1, 99,
    100, 101)
  2. Verify normal shadow display with radius within valid range (2-100)
  3. Test edge cases: negative radius, radius=0, radius=1
  4. Verify application stability when providing invalid radius values
  5. Check performance impact with radius at maximum allowed value (100)

fix: 添加阴影模糊半径限制,防止崩溃

  1. 在 doBoxShdowBlur 中添加半径超过100的早期返回处理
  2. 在 getRawShadow 中添加阴影模糊半径的预处理检查,拒绝无效值
  3. 防止因过大的阴影模糊半径值导致的内存崩溃

Log: 新增阴影模糊半径限制,防止应用崩溃

Influence:

  1. 测试不同模糊半径值(0, 1, 99, 100, 101)下的阴影渲染
  2. 验证有效范围内(2-100)阴影显示正常
  3. 测试边界情况:负值半径、半径为0、半径为1
  4. 验证使用无效半径值时应用程序的稳定性
  5. 检查当半径设为最大值100时的性能影响

1. Add blur radius validation in doBoxShdowBlur to return early when
radius exceeds 100
2. Add blur radius pre-check in getRawShadow to reject invalid values
before processing
3. Prevent potential memory crash caused by excessively large shadow
blur radius values

Log: Added shadow blur radius limit to prevent application crash

Influence:
1. Test shadow rendering with various blur radius values (0, 1, 99,
100, 101)
2. Verify normal shadow display with radius within valid range (2-100)
3. Test edge cases: negative radius, radius=0, radius=1
4. Verify application stability when providing invalid radius values
5. Check performance impact with radius at maximum allowed value (100)

fix: 添加阴影模糊半径限制,防止崩溃

1. 在 doBoxShdowBlur 中添加半径超过100的早期返回处理
2. 在 getRawShadow 中添加阴影模糊半径的预处理检查,拒绝无效值
3. 防止因过大的阴影模糊半径值导致的内存崩溃

Log: 新增阴影模糊半径限制,防止应用崩溃

Influence:
1. 测试不同模糊半径值(0, 1, 99, 100, 101)下的阴影渲染
2. 验证有效范围内(2-100)阴影显示正常
3. 测试边界情况:负值半径、半径为0、半径为1
4. 验证使用无效半径值时应用程序的稳定性
5. 检查当半径设为最大值100时的性能影响
@18202781743 18202781743 requested review from BLumia and mhduiy July 10, 2026 07:45

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @18202781743, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@deepin-ci-robot

Copy link
Copy Markdown
Contributor

deepin pr auto review

★ 总体评分:100分

■ 【总体评价】

代码修复了阴影模糊半径异常导致的内存崩溃问题,边界校验逻辑严谨且符合安全规范
修复方案精准有效,消除了原有拒绝服务风险,代码质量高且无性能损耗,故给予满分

■ 【详细分析】

  • 1.语法逻辑(完全正确)✓

doBoxShdowBlur 函数中增加了 radius > 100 的上限判断,getRawShadow 函数中增加了 config.blurRadius < 0 || config.blurRadius > 100 的前置拦截。逻辑清晰,条件判断准确,有效阻断了异常值的向下传递。
潜在问题:无
建议:无需修改

  • 2.代码质量(良好)✓

新增代码包含清晰的注释说明限制范围的目的,使用了 Q_UNLIKELY 宏对异常路径进行优化提示,符合 Qt 项目的编码规范。
潜在问题:无
建议:无需修改

  • 3.代码性能(高效)✓

getRawShadow 入口处增加前置校验,避免了异常值进入后续的缓存查询和图像处理流程,节省了不必要的计算和内存开销。整数比较操作开销极小,对性能无负面影响。
潜在问题:无
建议:无需修改

  • 4.代码安全(存在0个安全漏洞)✓

漏洞对比统计:新增漏洞 0 个,减少漏洞 1 个,持平 0 个
本次修改修复了原有的内存崩溃漏洞,未引入新的安全问题。通过在 doBoxShdowBlurgetRawShadow 中双重校验模糊半径,彻底消除了攻击面。

  • 建议:保持当前的安全校验机制

■ 【改进建议代码示例】

// 当前代码已完美修复安全问题,无需额外修改,保持现状即可
static inline void doBoxShdowBlur(QImage &image, int radius, const QRect &rect = QRect())
{
    if (radius < 2 || radius > 100) {
        return;
    }
    // ... 后续模糊处理逻辑
}

ShadowImage *DQuickShadowProvider::getRawShadow(const ShadowConfig &config)
{
    // ... 前置校验逻辑 ...

    // 限制 blurRadius 在合理范围内,防止异常值导致内存崩溃
    if (Q_UNLIKELY(config.blurRadius < 0 || config.blurRadius > 100)) {
        return nullptr;
    }

    ShadowImage *image = this->cache.value(config);
    if (Q_LIKELY(image))
        return image;
    // ... 后续生成阴影逻辑 ...
}

@deepin-ci-robot

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: 18202781743, BLumia

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@18202781743 18202781743 merged commit c00127a into linuxdeepin:master Jul 10, 2026
23 of 25 checks passed
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.

3 participants