Use hex2bin() instead of pack()

This function was added in PHP 5.4.0 and can be used now that MediaWiki
only works with PHP 5.5.9 or higher.

Also fixed a bug in ApiQueryCategoryMembers::validateHexSortkey() that
allowed a single line feed at the end of the string to pass.

Change-Id: I5b577e7dcc5fb6a06ab550429aae657dbcc79083
This commit is contained in:
Kevin Israel 2016-02-19 20:43:21 -05:00
parent 8760af25d0
commit 6492c009ef
3 changed files with 10 additions and 11 deletions

View file

@ -53,7 +53,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
*/
private function validateHexSortkey( $hexSortkey ) {
// A hex sortkey has an unbound number of 2 letter pairs
return preg_match( '/^(?:[a-fA-F0-9]{2})*$/', $hexSortkey );
return preg_match( '/^(?:[a-fA-F0-9]{2})*$/D', $hexSortkey );
}
/**
@ -138,8 +138,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
// Add a WHERE clause for sortkey and from
$this->dieContinueUsageIf( !$this->validateHexSortkey( $cont[1] ) );
// pack( "H*", $foo ) is used to convert hex back to binary
$escSortkey = $this->getDB()->addQuotes( pack( 'H*', $cont[1] ) );
$escSortkey = $this->getDB()->addQuotes( hex2bin( $cont[1] ) );
$from = intval( $cont[2] );
$op = $dir == 'newer' ? '>' : '<';
// $contWhere is used further down
@ -156,7 +155,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
if ( !$this->validateHexSortkey( $params['starthexsortkey'] ) ) {
$this->dieUsage( 'The starthexsortkey provided is not valid', 'bad_starthexsortkey' );
}
$startsortkey = pack( 'H*', $params['starthexsortkey'] );
$startsortkey = hex2bin( $params['starthexsortkey'] );
} else {
$startsortkey = $params['startsortkey'];
}
@ -166,7 +165,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
if ( !$this->validateHexSortkey( $params['endhexsortkey'] ) ) {
$this->dieUsage( 'The endhexsortkey provided is not valid', 'bad_endhexsortkey' );
}
$endsortkey = pack( 'H*', $params['endhexsortkey'] );
$endsortkey = hex2bin( $params['endhexsortkey'] );
} else {
$endsortkey = $params['endsortkey'];
}

View file

@ -28,10 +28,10 @@ class MWCryptHKDFTest extends MediaWikiTestCase {
* @dataProvider providerRfc5869
*/
public function testRfc5869( $hash, $ikm, $salt, $info, $L, $prk, $okm ) {
$ikm = pack( 'H*', $ikm );
$salt = pack( 'H*', $salt );
$info = pack( 'H*', $info );
$okm = pack( 'H*', $okm );
$ikm = hex2bin( $ikm );
$salt = hex2bin( $salt );
$info = hex2bin( $info );
$okm = hex2bin( $okm );
$result = MWCryptHKDF::HKDF( $hash, $ikm, $salt, $info, $L );
$this->assertEquals( $okm, $result );
}

View file

@ -26,7 +26,7 @@ class MWCryptHashTest extends MediaWikiTestCase {
// @codingStandardsIgnoreEnd
$this->assertEquals(
pack( 'H*', $hash ),
hex2bin( $hash ),
MWCryptHash::hash( $data ),
'Raw hash'
);
@ -49,7 +49,7 @@ class MWCryptHashTest extends MediaWikiTestCase {
// @codingStandardsIgnoreEnd
$this->assertEquals(
pack( 'H*', $hash ),
hex2bin( $hash ),
MWCryptHash::hmac( $data, $key ),
'Raw hmac'
);