27 lines
1004 B
Diff
27 lines
1004 B
Diff
|
|
||
|
get_rev_contents() has signed integer overflow with "long int" rev
|
||
|
and behaves unpredictably.
|
||
|
|
||
|
--- subversion-1.12.2/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c.fsfspacktest
|
||
|
+++ subversion-1.12.2/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c
|
||
|
@@ -59,7 +59,8 @@
|
||
|
get_rev_contents(svn_revnum_t rev, apr_pool_t *pool)
|
||
|
{
|
||
|
/* Toss in a bunch of magic numbers for spice. */
|
||
|
- apr_int64_t num = ((rev * 1234353 + 4358) * 4583 + ((rev % 4) << 1)) / 42;
|
||
|
+ apr_int64_t rev64 = rev;
|
||
|
+ apr_int64_t num = ((rev64 * 1234353 + 4358) * 4583 + ((rev64 % 4) << 1)) / 42;
|
||
|
return apr_psprintf(pool, "%" APR_INT64_T_FMT "\n", num);
|
||
|
}
|
||
|
|
||
|
@@ -407,7 +408,8 @@
|
||
|
|
||
|
if (! svn_stringbuf_compare(rstring, sb))
|
||
|
return svn_error_createf(SVN_ERR_FS_GENERAL, NULL,
|
||
|
- "Bad data in revision %ld.", i);
|
||
|
+ "Bad data in revision %ld - [%s] not [%s].",
|
||
|
+ i, rstring->data, sb->data);
|
||
|
}
|
||
|
|
||
|
return SVN_NO_ERROR;
|