You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by iv...@apache.org on 2015/11/28 14:47:14 UTC

svn commit: r1716973 - /subversion/trunk/subversion/libsvn_fs_fs/transaction.c

Author: ivan
Date: Sat Nov 28 13:47:14 2015
New Revision: 1716973

URL: http://svn.apache.org/viewvc?rev=1716973&view=rev
Log:
Add detection of some very unlikely itemidx corruption in FSFS transaction.

* subversion/libsvn_fs_fs/transaction.c
  (allocate_item_index): Check that we hit EOF when reading itemidx file.

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=1716973&r1=1716972&r2=1716973&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/transaction.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/transaction.c Sat Nov 28 13:47:14 2015
@@ -1789,7 +1789,13 @@ allocate_item_index(apr_uint64_t *item_i
                          APR_OS_DEFAULT, pool));
       SVN_ERR(svn_io_file_read_full2(file, buffer, sizeof(buffer)-1,
                                      &bytes_read, &eof, pool));
-      if (bytes_read)
+
+      /* Item index file should be shorter than SVN_INT64_BUFFER_SIZE,
+         otherwise we truncate data. */
+      if (!eof)
+          return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
+                                  _("Unexpected itemidx file length"));
+      else if (bytes_read)
         SVN_ERR(svn_cstring_atoui64(item_index, buffer));
       else
         *item_index = SVN_FS_FS__ITEM_INDEX_FIRST_USER;