-
Notifications
You must be signed in to change notification settings - Fork 145
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rdiff --paranoia produces (spurious?) critical errors #155
Comments
I figured it out, and it is indeed a spurious bug in how --paranoid is implemented. The problem is when a miss is appended here; Line 151 in 7c21b88
It can trigger an rs_appendflush() here; Line 307 in 7c21b88
Which can block if the output "tube" gets too full here; Line 370 in 7c21b88
And while its blocked and until the "tube" catches up, the scoop_pos offset into the input data is invalid. However, the paranoid checking then uses it to calculate the full block rollsum here; Line 154 in 7c21b88
Resulting in the paranoia checking comparing the checksum calculated at the wrong offset. This could be fixed by just removing the paranoia checking, which I'm really tempted to do. However, I'll also look into how hard it would be to ensure the scoop_pos offset is always valid even when the tube blocks. |
After looking at the code in more detail I've decided that it's non-trivial to change the code to keep the scoop_pos offset valid while the tube is blocked. The --paranoia feature is well past it's use-by date, and is now officially causing more bugs than it's uncovering. I'm just going to remove it. |
… rdiff. Also update NEWS.md with all changes since v2.0.2.
Fix #155 remove redundant and broken `--paranoia` option from rdiff.
This was reported to Debian at;
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=435901
I've confirmed it still happens with v2.0.2 in Debian testing now.
This should not be happening. It's unlikely to cause any corruption (which would require a strong-sum collision), but it might be indicating a rollsum bug that could be causing delta calculation to miss some matches, resulting in a larger delta than it should.
I will investigate.
The text was updated successfully, but these errors were encountered: