Skip to content

fix(terminal): skip wide char placeholders when copying text - #550

Merged
deepin-bot[bot] merged 1 commit into
linuxdeepin:masterfrom
JWWTSL:master
Jul 15, 2026
Merged

fix(terminal): skip wide char placeholders when copying text#550
deepin-bot[bot] merged 1 commit into
linuxdeepin:masterfrom
JWWTSL:master

Conversation

@JWWTSL

@JWWTSL JWWTSL commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Skip zero-width placeholder cells used by wide characters in plain text decoding.

Log: Fix invisible characters in copied selection

PMS: BUG-367885

Skip zero-width placeholder cells used by wide characters in plain text
decoding.

Log: Fix invisible characters in copied selection

PMS: BUG-367885

@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 @JWWTSL, 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

deepin pr auto review

★ 总体评分:95分

■ 【总体评价】

代码修复了终端文本解码时空字符导致字符串截断的缺陷,逻辑正确且实现简洁。
有效过滤空字符提升了解码健壮性,各维度均无问题,因属于局部小修复给予95分。

■ 【详细分析】

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

TerminalCharacterDecoder.cpp 文件中 PlainTextDecoder::decodeLine 函数在 push_back 前增加了 if (characters[i].character != 0) 判断,正确拦截了空字符,避免了 QString::fromStdWString 转换时产生的异常。
潜在问题:无
建议:可添加简短注释说明过滤空字符的原因,便于后续维护。

  • 2.代码质量良好✓

修改代码风格与原有代码保持一致,条件判断清晰直观,未引入冗余逻辑。
潜在问题:无
建议:增加行内注释说明空字符可能来源于控制序列或宽字符处理。

  • 3.代码性能无性能问题✓

仅在循环体内增加一次整数比较操作,时间复杂度保持 O(N),对终端解码整体性能无可感知影响。
建议:无需优化。

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

漏洞对比统计:新增漏洞 0 个,减少漏洞 0 个,持平 0 个
修复空字符注入问题消除了潜在的字符串截断风险,提升了数据完整性,无安全攻击面。

  • 建议:无需额外安全修复,当前逻辑已安全。

■ 【改进建议代码示例】

// PlainTextDecoder::decodeLine 中遍历字符数组时,过滤 character == 0 的空字符
void PlainTextDecoder::decodeLine(const Character* const characters, int count, LineProperty /*properties*/
                             )
{
...
    for (int i=0;i<outputCount;)
    {
        // 过滤空字符,避免 QString::fromStdWString 生成包含嵌入 \0 的字符串导致截断或乱码
        if (characters[i].character != 0) {
            plainText.push_back(characters[i].character);
        }
        i += qMax(1,Character::width(characters[i].character));
    }
    *_output << QString::fromStdWString(plainText);
}

@deepin-ci-robot

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: JWWTSL, lzwind

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

@JWWTSL

JWWTSL commented Jul 15, 2026

Copy link
Copy Markdown
Contributor Author

/forcemerge

@deepin-bot
deepin-bot Bot merged commit 474986d into linuxdeepin:master Jul 15, 2026
18 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