【问题标题】:Validate diff patch prior to applying it在应用之前验证差异补丁
【发布时间】:2012-01-27 19:38:28
【问题描述】:

我正在寻找一个可移植的差异库(No Pear,没有 php 非广泛支持的扩展——比如 xdiff),它允许我为更新机制做文件补丁。我使用的 diff 文件使用的是 unified 格式。

我发现 class.simplediff.php 女巫真的很不错,(即使它不支持开箱即用的文件,也只是在字符串中加载文件的问题)

但问题是我找不到验证所有替换是否能够成功处理的方法。

您是否知道允许在应用差异修补之前验证差异修补的库,或者您知道如何执行此操作?

【问题讨论】:

    标签: php diff patch auto-update


    【解决方案1】:

    我想不出一种方法来判断补丁是否有效——从逻辑上讲。但是,如果您的补丁源被认为是“安全的”,您可以通过执行以下操作来检查它是否至少是有效的语法:

    1. copy要打补丁的文件
    2. apply补丁
    3. 尝试使用 PHP cli 执行文件(例如php file.php

    如果第 3 步没有抛出致命异常,则补丁可能导致 PHP 语法有效。

    如果补丁的来源不安全,因为执行任意 PHP 可能导致有人控制您的机器,您不会希望这样做。

    【讨论】:

    • 嗯,在使用 unix patch 命令时,可能会出现“Hunk failed”错误。这就是我要检查的内容......因为如果无法进行替换,通常不会从语法上破坏代码。
    【解决方案2】:

    我已将 patch.c 代码翻译成 PHP:

    https://gist.github.com/1707075

    patch.c 代码本身有点混乱,PHP 代码也是如此。大块验证有效,但它不像我需要的那样“安全”——这就是为什么它不是我正在寻找的答案,但也许它会对其他人有所帮助。

    编辑:

    我编写了一些代码。我还不确定它是否 100% 可靠,但到目前为止,在“以只读方式验证以确保成功应用补丁”方面的结果非常好:https://github.com/idealtech/UnifiedDiffPatcher

    希望对某人有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 2011-09-30
      • 2017-11-15
      • 1970-01-01
      相关资源
      最近更新 更多