1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2025-02-21 13:46:52 +00:00

(trunk libT) #3449 "overflow error in tr_truncd()" -- fixed.

This commit is contained in:
Charles Kerr 2010-07-24 17:09:39 +00:00
parent f5a083a4c7
commit 230193053e
2 changed files with 20 additions and 8 deletions

View file

@ -375,21 +375,31 @@ test_url( void )
return 0;
}
static int
test_truncd( void )
{
char buf[32];
tr_snprintf( buf, sizeof( buf ), "%.2f%%", 99.999 );
check( !strcmp( buf, "100.00%" ) );
tr_snprintf( buf, sizeof( buf ), "%.2f%%", tr_truncd( 99.999, 2 ) );
check( !strcmp( buf, "99.99%" ) );
tr_snprintf( buf, sizeof( buf ), "%.4f", tr_truncd( 403650.656250, 4 ) );
check( !strcmp( buf, "403650.6562" ) );
return 0;
}
int
main( void )
{
char buf[32];
char *in, *out;
int len;
int i;
int l;
/* tr_truncd */
tr_snprintf( buf, sizeof( buf ), "%.2f%%", 99.999 );
check( !strcmp( buf, "100.00%" ) );
tr_snprintf( buf, sizeof( buf ), "%.2f%%", tr_truncd( 99.999, 2 ) );
check( !strcmp( buf, "99.99%" ) );
/* base64 */
out = tr_base64_encode( "YOYO!", -1, &len );
check( out );
@ -425,6 +435,8 @@ main( void )
return i;
if( ( i = test_url( ) ) )
return i;
if( ( i = test_truncd( ) ) )
return i;
/* test that tr_cryptoRandInt() stays in-bounds */
for( i = 0; i < 100000; ++i )

View file

@ -1386,7 +1386,7 @@ double
tr_truncd( double x, int decimal_places )
{
const int i = (int) pow( 10, decimal_places );
double x2 = (int)(x*i);
const double x2 = (int64_t)(x * i);
return x2 / i;
}