You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2014/03/02 22:30:22 UTC
svn commit: r1573371 - in /subversion/trunk/subversion: libsvn_fs_fs/fs_fs.c
libsvn_fs_fs/transaction.c libsvn_fs_fs/verify.c libsvn_subr/checksum.c
libsvn_subr/fnv1a.c
Author: stefan2
Date: Sun Mar 2 21:30:21 2014
New Revision: 1573371
URL: http://svn.apache.org/r1573371
Log:
Ensure that the p2l index file format in FSFS is independent of the
machine's endianess.
We handle FNV-1 checksums as integers and shall only use a definitive
byte order in the digest and on disk. I.e. we must no longer do a
conversion of the result in the checksum function itself.
The on-disk part is handled by the integer stream already (always little
endian) but we used a big endian input before. Hence, the on-disk
representation changes. For the digest part, we convert to / from big
endian when writing to the digest / reading from it.
FSX is not affected ATM as it does not use index checksums, yet.
* subversion/libsvn_fs_fs/fs_fs.c
(write_revision_zero): Update the checksum parts of the rev 0 template.
* subversion/libsvn_subr/fnv1a.c
(finalize_fnv1a_32x4,
svn__fnv1a_32): The checksum value is no longer platform dependent.
* subversion/libsvn_subr/checksum.c
(svn_checksum,
svn_checksum_final): Make sure the digest has a definitive, platform
independent byte order.
* subversion/libsvn_fs_fs/transaction.c
(fnv1a_checksum_finalize): Convert from byte ordering used in the
digest back to host order.
* subversion/libsvn_fs_fs/verify.c
(expected_streamed_checksum): Same.
Patch by: philip
Modified:
subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c
subversion/trunk/subversion/libsvn_fs_fs/transaction.c
subversion/trunk/subversion/libsvn_fs_fs/verify.c
subversion/trunk/subversion/libsvn_subr/checksum.c
subversion/trunk/subversion/libsvn_subr/fnv1a.c
Modified: subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c?rev=1573371&r1=1573370&r2=1573371&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c Sun Mar 2 21:30:21 2014
@@ -1274,9 +1274,9 @@ write_revision_zero(svn_fs_t *fs)
"\x80\x80\4\1\x1D" /* 64k pages, 1 page using 29 bytes */
"\0" /* offset entry 0 page 1 */
/* len, item & type, rev, checksum */
- "\x11\x34\0\xe0\xc6\xac\xa9\x07"
- "\x59\x09\0\xc0\xfa\xf8\xc5\x04"
- "\1\x0d\0\xf2\x95\xbe\xea\x01"
+ "\x11\x34\0\xf5\xd6\x8c\x81\x06"
+ "\x59\x09\0\xc8\xfc\xf6\x81\x04"
+ "\1\x0d\0\x9d\x9e\xa9\x94\x0f"
"\x95\xff\3\x1b\0\0", /* last entry fills up 64k page */
38,
fs->pool));
Modified: subversion/trunk/subversion/libsvn_fs_fs/transaction.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/transaction.c?rev=1573371&r1=1573370&r2=1573371&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/transaction.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/transaction.c Sun Mar 2 21:30:21 2014
@@ -1765,7 +1765,7 @@ fnv1a_checksum_finalize(apr_uint32_t *di
SVN_ERR(svn_checksum_final(&checksum, context, scratch_pool));
SVN_ERR_ASSERT(checksum->kind == svn_checksum_fnv1a_32x4);
- *digest = *(apr_uint32_t *)(checksum->digest);
+ *digest = ntohl(*(apr_uint32_t *)(checksum->digest));
return SVN_NO_ERROR;
}
Modified: subversion/trunk/subversion/libsvn_fs_fs/verify.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/verify.c?rev=1573371&r1=1573370&r2=1573371&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/verify.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/verify.c Sun Mar 2 21:30:21 2014
@@ -469,7 +469,7 @@ expected_streamed_checksum(apr_file_t *f
SVN_ERR(svn_checksum_final(&checksum, context, pool));
SVN_ERR(expected_checksum(file, entry,
- *(apr_uint32_t *)checksum->digest,
+ ntohl(*(apr_uint32_t *)checksum->digest),
pool));
return SVN_NO_ERROR;
Modified: subversion/trunk/subversion/libsvn_subr/checksum.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/checksum.c?rev=1573371&r1=1573370&r2=1573371&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/checksum.c (original)
+++ subversion/trunk/subversion/libsvn_subr/checksum.c Sun Mar 2 21:30:21 2014
@@ -21,6 +21,8 @@
* ====================================================================
*/
+#define APR_WANT_BYTEFUNC
+
#include <ctype.h>
#include <apr_md5.h>
@@ -462,11 +464,13 @@ svn_checksum(svn_checksum_t **checksum,
break;
case svn_checksum_fnv1a_32:
- *(apr_uint32_t *)(*checksum)->digest = svn__fnv1a_32(data, len);
+ *(apr_uint32_t *)(*checksum)->digest
+ = htonl(svn__fnv1a_32(data, len));
break;
case svn_checksum_fnv1a_32x4:
- *(apr_uint32_t *)(*checksum)->digest = svn__fnv1a_32x4(data, len);
+ *(apr_uint32_t *)(*checksum)->digest
+ = htonl(svn__fnv1a_32x4(data, len));
break;
default:
@@ -589,12 +593,12 @@ svn_checksum_final(svn_checksum_t **chec
case svn_checksum_fnv1a_32:
*(apr_uint32_t *)(*checksum)->digest
- = svn_fnv1a_32__finalize(ctx->apr_ctx);
+ = htonl(svn_fnv1a_32__finalize(ctx->apr_ctx));
break;
case svn_checksum_fnv1a_32x4:
*(apr_uint32_t *)(*checksum)->digest
- = svn_fnv1a_32x4__finalize(ctx->apr_ctx);
+ = htonl(svn_fnv1a_32x4__finalize(ctx->apr_ctx));
break;
default:
Modified: subversion/trunk/subversion/libsvn_subr/fnv1a.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/fnv1a.c?rev=1573371&r1=1573370&r2=1573371&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/fnv1a.c (original)
+++ subversion/trunk/subversion/libsvn_subr/fnv1a.c Sun Mar 2 21:30:21 2014
@@ -109,15 +109,15 @@ finalize_fnv1a_32x4(apr_uint32_t hashes[
if (len)
memcpy(final_data + sizeof(apr_uint32_t) * SCALING, input, len);
- return htonl(fnv1a_32(FNV1_BASE_32,
- final_data,
- sizeof(apr_uint32_t) * SCALING + len));
+ return fnv1a_32(FNV1_BASE_32,
+ final_data,
+ sizeof(apr_uint32_t) * SCALING + len);
}
apr_uint32_t
svn__fnv1a_32(const void *input, apr_size_t len)
{
- return htonl(fnv1a_32(FNV1_BASE_32, input, len));
+ return fnv1a_32(FNV1_BASE_32, input, len);
}
apr_uint32_t