为什么bsdiff.exe在使用这个较小的文件时遇到问题?

ork*_*Bad 1 patch binary-data binary-diff

我正在使用bsdiff.exe构建一个软件补丁并将其与bspatch.exe一起应用,到目前为止,对于小于120MB的文件没有任何问题.我有一个二进制文件以前是21MB,现在是77MB,而bsdiff似乎无限期挂起.

根据文档,"bsdiff非常需要内存.它需要max(17*n,9*n + m)+ O(1)字节的内存,其中n是旧文件的大小,m是大小新文件." 这解释了大文件的问题,但是当delta较大时似乎会出现问题.

有没有人有这方面的任何信息?任何事情都会有所帮助,谢谢!

小智 5

当尝试处理只包含2MB DSP可执行代码的文件时,我也遇到了bsdiff崩溃的问题.

经过一些调试后,我确定问题出在qsufsort函数中,该函数用于根据"旧"文件创建后缀数组.qsufsort调用一个名为split的函数,该函数以递归方式调用自身.在崩溃的情况下,递归调用发生了很多次,以至于程序耗尽了堆栈空间并引发异常.

正如本主题所示: http ://bugs.debian.org/cgi-bin/bugreport.cgi?bug = 409664解决方案是用不同的解决方案替换qsufsort以生成后缀数组.后缀数组的Wikipedia条目引用了SA-IS,因此我从这里下载了源代码:https: //sites.google.com/site/yuta256/sais

然后我与sais.c和sais.h一起重建了bsdiff.c并将调用替换为qsufsort:

我[0] = oldsize; sais(老,我+ 1,老年人);

现在bsdiff每次都有效,而且速度也快!