Skip to content

master#285

Merged
deepin-bot[bot] merged 4 commits intolinuxdeepin:masterfrom
Johnson-zs:master
May 7, 2026
Merged

master#285
deepin-bot[bot] merged 4 commits intolinuxdeepin:masterfrom
Johnson-zs:master

Conversation

@Johnson-zs
Copy link
Copy Markdown
Contributor

  • feat: add dfm-burner CLI tool for optical disc operations
  • feat: add SM3 checksum verification for disc burning

1. Implemented comprehensive command-line interface for DFM burn library
2. Added new dfm-burner executable with subcommands for all major disc
operations
3. Includes info query, file burning, ISO operations, disc erasure, and
quality checks
4. Supports both interactive progress display and JSON output for
scripting
5. Added extensive help documentation and usage examples
6. Implemented UDF packet writing for incremental file operations

Log: Added dfm-burner command-line tool for optical disc burning and
management

Influence:
1. Install dfm-burner binary and verify package dependencies
2. Test each subcommand with various media types (CD/DVD/BD)
3. Verify JSON output format for scripting use cases
4. Test error handling with invalid inputs and device states
5. Check UDF packet writing operations on rewritable media
6. Validate multi-session burning and append functionality

feat: 新增dfm-burner光盘操作命令行工具

1. 为DFM刻录库实现全面的命令行接口
2. 新增dfm-burner可执行文件,支持所有主要光盘操作子命令
3. 包含信息查询、文件刻录、ISO操作、光盘擦除和质检功能
4. 支持交互式进度显示和JSON输出以便脚本调用
5. 添加了详尽的帮助文档和使用示例
6. 实现了UDF封包写入功能支持增量文件操作

Log: 新增光盘刻录管理命令行工具dfm-burner

Influence:
1. 安装dfm-burner可执行文件并验证软件包依赖
2. 使用不同介质类型(CD/DVD/BD)测试各个子命令
3. 验证脚本调用所需的JSON输出格式
4. 测试无效输入和设备状态下的错误处理
5. 在可擦写介质上测试UDF封包写入操作
6. 验证多区段刻录和追加功能
@deepin-ci-robot
Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: Johnson-zs

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

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 6, 2026

  • 检测到debian目录文件有变更: debian/control,debian/control.in,debian/libdfm-burn.install,debian/libdfm6-burn.install

@github-actions github-actions Bot requested a review from liujianqiang-niu May 6, 2026 09:14
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 6, 2026

  • 敏感词检查失败, 检测到1个文件存在敏感词
详情
{
    "debian/control": [
        {
            "line": "Homepage: http://www.deepin.org",
            "line_number": 33,
            "rule": "S35",
            "reason": "Url link | 6fe814dfb7"
        }
    ]
}

1. Added SM3 checksum generation and verification capabilities
2. Implemented new manifest system to store file hashes before burning
3. Added new CLI commands for checksum generation and verification
4. Added libssl-dev as new dependency for cryptographic functions
5. Integrated checksum verification into optical disc manager
6. Added cache management for temporary extraction during verification

Log:
1. Added 'checksum gen' command to generate SM3 manifest
2. Added 'checksum verify' command to validate disc integrity
3. Enhanced error reporting for checksum mismatches

Influence:
1. Test checksum generation on various file types and sizes
2. Verify checksum validation with correct and corrupted files
3. Test manifest generation with different ISO base paths
4. Verify cache cleanup after verification completes
5. Test command line help and error messages for new features
6. Validate performance impact with large directories
7. Test cross-platform compatibility of manifest files

feat: 新增光盘刻录的SM3校验功能

1. 新增SM3校验生成和验证功能
2. 实现新的校验清单系统用于存储刻录前的文件哈希值
3. 新增命令行指令用于校验生成和验证
4. 添加libssl-dev作为新的加密功能依赖项
5. 将校验验证功能集成到光盘管理器中
6. 为验证过程中的临时解压添加缓存管理

Log:
1. 新增'checksum gen'命令用于生成SM3清单
2. 新增'checksum verify'命令用于验证光盘完整性
3. 增强校验不匹配时的错误报告

Influence:
1. 测试对不同类型和大小的文件生成校验和
2. 验证对正确和已损坏文件的校验过程
3. 使用不同ISO基础路径测试清单生成
4. 验证完成后确认缓存清理正常
5. 测试新功能的命令行帮助和错误消息
6. 验证对大目录的性能影响
7. 测试清单文件的跨平台兼容性

Task: https://pms.uniontech.com/task-view-388937.html
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 7, 2026

  • 检测到debian目录文件有变更: debian/control,debian/control.in,debian/libdfm-burn.install,debian/libdfm6-burn.install

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 7, 2026

  • 敏感词检查失败, 检测到1个文件存在敏感词
详情
{
    "debian/control": [
        {
            "line": "Homepage: http://www.deepin.org",
            "line_number": 33,
            "rule": "S35",
            "reason": "Url link | 6fe814dfb7"
        }
    ]
}

1. Changed verification to extract and check files individually instead
of extracting entire disc
2. Added explicit osirrox enable/disable control
3. Improved memory efficiency by deleting processed files immediately
4. Better error handling with proper resource cleanup
5. Made process more reliable for multi-session discs

The previous implementation would extract the entire disc contents
to verify checksums, which was inefficient and problematic for multi-
session discs. The new approach extracts files one at a time, computes
their hash, then removes them immediately. This improves memory usage
and compatibility with different disc types.

Log: Improved disc verification reliability and performance

Influence:
1. Test verification with normal single-session discs
2. Test verification with multi-session discs
3. Verify behavior when checksums match and when they don't
4. Check memory usage during verification
5. Test with various file types and sizes
6. Verify cleanup of temporary files after completion

perf: 优化光盘校验过程

1. 改为逐个提取并校验文件,而不是提取整个光盘内容
2. 添加显式的osirrox启用/禁用控制
3. 通过立即删除已处理文件提高内存效率
4. 改进错误处理,确保正确释放资源
5. 提升对多区段光盘的可靠性

之前的实现会提取整个光盘内容来校验哈希值,效率低下且对多区段光盘有问题。
新方法逐个提取文件,计算哈希后立即删除,提高了内存使用效率和不同光盘类型
的兼容性。

Log: 提高了光盘校验的可靠性和性能

Influence:
1. 测试普通单区段光盘的验证
2. 测试多区段光盘的验证
3. 验证哈希值匹配和不匹配时的行为
4. 检查验证过程中的内存使用情况
5. 测试不同类型和大小的文件
6. 验证完成后临时文件的清理情况
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 7, 2026

  • 检测到debian目录文件有变更: debian/control,debian/control.in,debian/libdfm-burn.install,debian/libdfm6-burn.install

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 7, 2026

  • 敏感词检查失败, 检测到1个文件存在敏感词
详情
{
    "debian/control": [
        {
            "line": "Homepage: http://www.deepin.org",
            "line_number": 33,
            "rule": "S35",
            "reason": "Url link | 6fe814dfb7"
        }
    ]
}

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 7, 2026

  • 检测到debian目录文件有变更: debian/control,debian/control.in,debian/libdfm-burn.install,debian/libdfm6-burn.install

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 7, 2026

  • 敏感词检查失败, 检测到1个文件存在敏感词
详情
{
    "debian/control": [
        {
            "line": "Homepage: http://www.deepin.org",
            "line_number": 33,
            "rule": "S35",
            "reason": "Url link | 6fe814dfb7"
        }
    ]
}

Modified QDirIterator flags to include hidden files when generating
checksum manifests. Previously hidden files were excluded from the
manifest which could cause missing files in backup scenarios where
hidden files are important (like configuration files).

Log: Now including hidden files in disk checksum manifests

Influence:
1. Test manifest generation with directories containing hidden files
2. Verify hidden files checksums are correctly recorded in manifest
3. Check manifest verification process with hidden files included
4. Test with directories containing both regular and hidden files

fix: 在生成校验和清单时包含隐藏文件

修改了 QDirIterator 的标志以在生成校验和清单时包含隐藏文件。之前版本中隐
藏文件被排除在清单之外,这在备份场景下可能导致重要隐藏文件(如配置文件)
缺失的问题。

Log: 现在校验和清单包含隐藏文件

Influence:
1. 测试包含隐藏文件的目录清单生成
2. 验证隐藏文件的校验和被正确记录到清单中
3. 检查包含隐藏文件时的清单验证过程
4. 测试同时包含常规文件和隐藏文件的目录情况
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 7, 2026

  • 检测到debian目录文件有变更: debian/control,debian/control.in,debian/libdfm-burn.install,debian/libdfm6-burn.install

@deepin-ci-robot
Copy link
Copy Markdown

deepin pr auto review

代码审查报告

经过对提供的 git diff 进行详细审查,以下是从语法逻辑、代码质量、代码性能和代码安全四个方面的评估和改进建议:

1. 语法逻辑

优点

  • 代码结构清晰,新增的命令行工具(dfm-burner)功能完整,支持多种光盘操作
  • CLI参数解析逻辑合理,使用子命令模式(info, burn, write-iso等)
  • 新增的SM3校验和功能实现逻辑正确,包括生成和验证两个步骤

改进建议

  1. CMakeLists.txt中的路径拼写错误:

    // src/dfm-burn/dfm-burn-client/CMakeLists.txt
    include_directories(
        ${PROJECT_SOURCE_DIR}/../dfm-burn-lib/inlcude  // "inlcude" 应为 "include"
    )
  2. DXorrisoEngine::doExtract参数命名可能引起混淆:

    // src/dfm-burn/dfm-burn-lib/private/dxorrisoengine.cpp
    bool DXorrisoEngine::doExtract(const QString &diskPath, const QString &isoPath)
    {
        // 注释指出参数顺序与实际使用相反,建议重命名参数以避免混淆
        // 建议改为:
        // bool DXorrisoEngine::doExtract(const QString &isoPath, const QString &diskPath)
  3. BurnOption枚举值缺少文档说明:

    // include/dfm-burn/dfm-burn/dburn_global.h
    enum class BurnOption : unsigned int {
        // ... 其他选项
        kChecksum = 1 << 7,   // SM3 checksum verification
        // 建议添加更详细的说明,如"启用SM3校验和验证功能"
    };

2. 代码质量

优点

  • 代码组织良好,新功能模块化清晰
  • 添加了详细的命令行帮助文档(README.md)
  • 使用了Qt的信号槽机制处理异步操作

改进建议

  1. 错误处理可以更统一:

    // 建议在DOpticalDiscManager类中添加统一的错误处理方法
    // 而不是在多处使用dptr->errorMsg = "...";
    bool DOpticalDiscManager::setError(const QString &msg)
    {
        dptr->errorMsg = msg;
        qWarning() << "DOpticalDiscManager error:" << msg;
        return false;
    }
  2. 资源管理可以更安全:

    // src/dfm-burn/dfm-burn-lib/private/dsm3hash.cpp
    QString DSM3Hash::sm3File(const QString &filePath)
    {
        // 建议使用RAII管理EVP_MD_CTX资源
        std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_free)> ctx(EVP_MD_CTX_new(), EVP_MD_CTX_free);
        if (!ctx)
            return {};
        
        // ... 其余代码
    }
  3. 代码重复:

    // 多处使用类似的connect代码,可以提取为公共方法
    // 建议在DOpticalDiscManager中添加:
    template<typename T>
    void connectJobSignals(T *engine)
    {
        connect(engine, &T::jobStatusChanged, this,
            [this, ptr = QPointer(engine)](auto&&... args) {
                if (ptr)
                    Q_EMIT jobStatusChanged(std::forward<decltype(args)>(args)...);
            });
    }

3. 代码性能

优点

  • 校验和验证时采用逐个文件提取、计算、删除的方式,避免一次性提取整个光盘内容
  • 使用固定大小的缓冲区(8KB)进行文件哈希计算

改进建议

  1. 校验和计算缓冲区大小可以优化:

    // src/dfm-burn/dfm-burn-lib/private/dsm3hash.cpp
    static constexpr int kBufferSize = 8192;
    // 建议根据系统页面大小或典型块大小调整,例如:
    static constexpr int kBufferSize = 64 * 1024; // 64KB
  2. 缓存目录清理可以更高效:

    // src/dfm-burn/dfm-burn-lib/dopticaldiscmanager.cpp
    static void cleanupExtractCache(QDir dir)
    {
        if (!dir.exists())
            return;
        // 当前实现会遍历所有文件修改权限后再删除
        // 对于大量小文件可能效率不高
        // 考虑使用系统命令或更高效的批量删除方法
    }
  3. JSON序列化可以优化:

    // 在生成校验和清单时,可以考虑使用更紧凑的JSON格式
    // 或者在验证时使用流式JSON解析器,减少内存使用
    outFile.write(QJsonDocument(root).toJson(QJsonDocument::Compact));

4. 代码安全

优点

  • 使用了OpenSSL的EVP接口进行SM3哈希计算,符合安全最佳实践
  • 文件路径处理使用了Qt的路径操作函数,减少了路径遍历风险

改进建议

  1. 路径验证不足:

    // src/dfm-burn/dfm-burn-lib/dopticaldiscmanager.cpp
    bool DOpticalDiscManager::generateChecksumManifest(const QString &savePath)
    {
        // 建议添加对savePath的验证,防止路径遍历攻击
        QFileInfo saveInfo(savePath);
        if (!saveInfo.absoluteFilePath().startsWith(QDir::homePath())) {
            dptr->errorMsg = "Output path must be within home directory";
            return false;
        }
        // ... 其余代码
    }
  2. 临时文件处理:

    // 在校验和验证过程中,临时文件可能包含敏感数据
    // 建议在删除前安全擦除文件内容
    static bool secureDelete(const QString &filePath)
    {
        QFile file(filePath);
        if (!file.open(QIODevice::ReadWrite))
            return false;
        
        // 用随机数据覆盖文件内容
        qint64 size = file.size();
        QByteArray buffer(4096, 0);
        for (qint64 pos = 0; pos < size; pos += buffer.size()) {
            file.seek(pos);
            file.write(buffer);
        }
        file.close();
        return QFile::remove(filePath);
    }
  3. 设备访问权限:

    // 在访问设备前应验证权限
    bool DOpticalDiscManager::verifyChecksum(const QString &manifestPath)
    {
        // 建议添加设备访问权限检查
        QFileInfo devInfo(dptr->curDev);
        if (!devInfo.exists() || !devInfo.isReadable()) {
            dptr->errorMsg = "Device not accessible: " + dptr->curDev;
            return false;
        }
        // ... 其余代码
    }
  4. 输入验证:

    // 在CLI参数解析中,应加强对用户输入的验证
    bool CliOptions::parseBurnArgs(const QStringList &args, BurnCliConfig &config) const
    {
        // ... 现有代码
        
        // 验证卷标名称
        if (!config.volumeId.isEmpty()) {
            // 检查卷标长度和字符集
            if (config.volumeId.length() > 32) {
                cerr << "Error: Volume ID too long (max 32 characters)" << endl;
                return false;
            }
            // 检查特殊字符等
        }
        
        // ... 其余代码
    }

总结

整体来看,这次代码变更添加了功能完整的命令行工具和SM3校验和功能,代码质量较高。主要改进方向包括:

  1. 修正拼写错误和参数命名混淆
  2. 统一错误处理和资源管理方式
  3. 优化性能关键路径,如缓冲区大小和文件操作
  4. 加强安全验证,特别是路径处理和临时文件管理

建议在合并前至少修复拼写错误和参数命名问题,其他改进可以在后续迭代中逐步实施。

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 7, 2026

  • 敏感词检查失败, 检测到1个文件存在敏感词
详情
{
    "debian/control": [
        {
            "line": "Homepage: http://www.deepin.org",
            "line_number": 33,
            "rule": "S35",
            "reason": "Url link | 6fe814dfb7"
        }
    ]
}

@Johnson-zs
Copy link
Copy Markdown
Contributor Author

/forcemerge

1 similar comment
@Johnson-zs
Copy link
Copy Markdown
Contributor Author

/forcemerge

@deepin-bot
Copy link
Copy Markdown

deepin-bot Bot commented May 7, 2026

This pr force merged! (status: blocked)

@deepin-bot deepin-bot Bot merged commit de2c8bb into linuxdeepin:master May 7, 2026
20 of 21 checks passed
@deepin-bot
Copy link
Copy Markdown

deepin-bot Bot commented May 7, 2026

This pr force merged! (status: unknown)

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.

2 participants