Daniel Shahaf <[email protected]> writes:
> Philip Martin wrote on Wed, Jul 25, 2012 at 10:49:36 +0100:
>>
>> I attached to the issue a repository that demonstrates the corruption;
>> verify doesn't report a problem on that repository. What does verify
>> check?
>
> validate_root_noderev() catches an instance of the #4129 corruption and
> in its docstring xrefs svn_fs_fs__verify(), so I think the checks in the
> former are done in the latter too.
validate_root_noderev is only called by write_final_rev and not during
verify. svn_fs_fs__verify calls svn_fs_fs__verify_root and that does:
/* Issue #4129: bogus predecessors. */
/* Check 1: predecessor must be an earlier revision.
*/
if (pred_rev >= root->rev)
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
"r%ld's root node's predecessor is r%ld"
" but must be earlier revision",
root->rev, pred_rev);
/* Check 2: distances must be a power of 2.
* Note that this condition is not defined by the FSFS format but
* merely a byproduct of the current implementation. Therefore,
* it may help to spot corruptions for the time being but might
* need to be removed / relaxed in later versions.
*/
delta = root->rev - pred_rev;
if (delta & (delta - 1))
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
"r%ld's root node's predecessor is r%ld"
" but the delta must be a power of 2",
root->rev, pred_rev);
which doesn't catch the corruption I introduced namely that /@4 and /A@4
have predecessor /@2 and /A@2 rather than /@3 and /A@3.
--
Certified & Supported Apache Subversion Downloads:
http://www.wandisco.com/subversion/download