Skip to content

Commit 716082d

Browse files
authored
Merge pull request #357 from web3p/update-is-address
Return true only when the address is lowercase or in checksum format
2 parents 1e6213d + 6d9c359 commit 716082d

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

src/Utils.php

+5-4
Original file line numberDiff line numberDiff line change
@@ -175,16 +175,14 @@ public static function isNegative($value)
175175
* isAddress
176176
*
177177
* @param string $value
178-
* @return bool
178+
* @return bool true if the address is lowercase or in checksum format otherwise false
179179
*/
180180
public static function isAddress($value)
181181
{
182182
if (!is_string($value)) {
183183
throw new InvalidArgumentException('The value to isAddress function must be string.');
184184
}
185-
if (preg_match('/^(0x|0X)?[a-f0-9A-F]{40}$/', $value) !== 1) {
186-
return false;
187-
} elseif (preg_match('/^(0x|0X)?[a-f0-9]{40}$/', $value) === 1 || preg_match('/^(0x|0X)?[A-F0-9]{40}$/', $value) === 1) {
185+
if (preg_match('/^(0x)?[a-f0-9]{40}$/', $value) === 1) {
188186
return true;
189187
}
190188
return self::isAddressChecksum($value);
@@ -202,6 +200,9 @@ public static function isAddressChecksum($value)
202200
throw new InvalidArgumentException('The value to isAddressChecksum function must be string.');
203201
}
204202
$value = self::stripZero($value);
203+
if (mb_strlen($value) !== 40) {
204+
return false;
205+
}
205206
$hash = self::stripZero(self::sha3(mb_strtolower($value)));
206207

207208
for ($i = 0; $i < 40; $i++) {

test/unit/UtilsTest.php

+6-3
Original file line numberDiff line numberDiff line change
@@ -232,17 +232,20 @@ public function testIsAddress()
232232
$this->assertEquals($isAddress, true);
233233

234234
$isAddress = Utils::isAddress('0Xca35b7d915458ef540ade6068dfe2f44e8fa733c');
235-
$this->assertEquals($isAddress, true);
235+
$this->assertEquals($isAddress, false);
236236

237237
$isAddress = Utils::isAddress('0XCA35B7D915458EF540ADE6068DFE2F44E8FA733C');
238-
$this->assertEquals($isAddress, true);
238+
$this->assertEquals($isAddress, false);
239239

240240
$isAddress = Utils::isAddress('0xCA35B7D915458EF540ADE6068DFE2F44E8FA733C');
241-
$this->assertEquals($isAddress, true);
241+
$this->assertEquals($isAddress, false);
242242

243243
$isAddress = Utils::isAddress('0xCA35B7D915458EF540ADE6068DFE2F44E8FA73cc');
244244
$this->assertEquals($isAddress, false);
245245

246+
$isAddress = Utils::isAddress('0xCA35b7d915458Ef540ADE6068DfE2F44E8fA73cC');
247+
$this->assertEquals($isAddress, true);
248+
246249
$this->expectException(InvalidArgumentException::class);
247250
$isAddress = Utils::isAddress(new stdClass);
248251
}

0 commit comments

Comments
 (0)