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;
     }


Reply via email to