From: Sam Reed Date: Sat, 31 Dec 2011 22:53:50 +0000 (+0000) Subject: Prevent undefined offset when formatBitrate is given a significantly large enough... X-Git-Tag: 1.31.0-rc.0~25643 X-Git-Url: http://git.cyclocoop.org/%28?a=commitdiff_plain;h=cea7c863e5208e463549229bd6c21fe6a99eb815;p=lhc%2Fweb%2Fwiklou.git Prevent undefined offset when formatBitrate is given a significantly large enough number (10^27) > echo $wgLang->formatBitrate( pow( 10, 27 ) ); PHP Notice: Undefined offset: 9 in /home/reedy/mediawiki/trunk/phase3/languages/Language.php on line 3827 PHP Stack trace: PHP 1. {main}() /home/reedy/mediawiki/trunk/phase3/maintenance/eval.php:0 PHP 2. eval() /home/reedy/mediawiki/trunk/phase3/maintenance/eval.php:82 PHP 3. Language->formatBitrate() /home/reedy/mediawiki/trunk/phase3/maintenance/eval.php(82) : eval()'d code:1 Notice: Undefined offset: 9 in /home/reedy/mediawiki/trunk/phase3/languages/Language.php on line 3827 Call Stack: 0.0006 650736 1. {main}() /home/reedy/mediawiki/trunk/phase3/maintenance/eval.php:0 61.6539 21593432 2. eval(''echo $wgLang->formatBitrate( pow( 10, 27 ) );;'') /home/reedy/mediawiki/trunk/phase3/maintenance/eval.php:82 61.6540 21593512 3. Language->formatBitrate() /home/reedy/mediawiki/trunk/phase3/maintenance/eval.php(82) : eval()'d code:1 1bps --- diff --git a/languages/Language.php b/languages/Language.php index af78845c0a..7b8d8aafc2 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -3819,6 +3819,14 @@ class Language { } $unitIndex = (int)floor( log10( $bps ) / 3 ); $mantissa = $bps / pow( 1000, $unitIndex ); + + $maxIndex = count( $units ) - 1; + + if ( $unitIndex > $maxIndex ) { + // Prevent code falling off end of $units array + $mantissa *= ( $unitIndex - $maxIndex ) * 1000; + $unitIndex = $maxIndex; + } if ( $mantissa < 10 ) { $mantissa = round( $mantissa, 1 ); } else { diff --git a/tests/phpunit/languages/LanguageTest.php b/tests/phpunit/languages/LanguageTest.php index ba9cba132a..207664ec57 100644 --- a/tests/phpunit/languages/LanguageTest.php +++ b/tests/phpunit/languages/LanguageTest.php @@ -345,6 +345,11 @@ class LanguageTest extends MediaWikiTestCase { "1Ybps", "1 yottabit per second" ), + array( + pow( 10, 27 ), + "1,000Ybps", + "1,000 yottabits per second" + ), ); } }