Author: stefan2
Date: Tue Jan 27 01:48:43 2015
New Revision: 1654934
URL: http://svn.apache.org/r1654934
Log:
* subversion/libsvn_fs_fs/transaction.c
(get_shared_rep): Related to issue #4554, never pick a rep cache entry
that only matches in SHA-1 but not in size.
Modified:
subversion/trunk/subversion/libsvn_fs_fs/transaction.c
Modified: subversion/trunk/subversion/libsvn_fs_fs/transaction.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/transaction.c?rev=1654934&r1=1654933&r2=1654934&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/transaction.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/transaction.c Tue Jan 27 01:48:43
2015
@@ -2210,10 +2210,21 @@ get_shared_rep(representation_t **old_re
}
}
- /* Add information that is missing in the cached data. */
- if (*old_rep)
+ if (!*old_rep)
+ return SVN_NO_ERROR;
+
+ /* We don't want 0-length PLAIN representations to replace non-0-length
+ ones (see issue #4554). Also, this doubles as a simple guard against
+ general rep-cache induced corruption. */
+ if ( ((*old_rep)->expanded_size != rep->expanded_size)
+ || ((*old_rep)->size != rep->size))
+ {
+ *old_rep = NULL;
+ }
+ else
{
- /* Use the old rep for this content. */
+ /* Add information that is missing in the cached data.
+ Use the old rep for this content. */
memcpy((*old_rep)->md5_digest, rep->md5_digest, sizeof(rep->md5_digest));
(*old_rep)->uniquifier = rep->uniquifier;
}