Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit bb57880

Browse filesBrowse files
committed
[Uid] Fix validating nil and max uuid
1 parent 7fa6cea commit bb57880
Copy full SHA for bb57880

File tree

2 files changed

+28
-1
lines changed
Filter options

2 files changed

+28
-1
lines changed

‎src/Symfony/Component/Uid/Tests/UuidTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Uid/Tests/UuidTest.php
+19Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,25 @@ public function testIsValid()
170170
$this->assertTrue(UuidV4::isValid(self::A_UUID_V4));
171171
}
172172

173+
public function testIsValidWithNilUuid()
174+
{
175+
$this->assertTrue(Uuid::isValid('00000000-0000-0000-0000-000000000000'));
176+
$this->assertTrue(NilUuid::isValid('00000000-0000-0000-0000-000000000000'));
177+
178+
$this->assertFalse(UuidV1::isValid('00000000-0000-0000-0000-000000000000'));
179+
$this->assertFalse(UuidV4::isValid('00000000-0000-0000-0000-000000000000'));
180+
}
181+
182+
public function testIsValidWithMaxUuid()
183+
{
184+
$this->assertTrue(Uuid::isValid('ffffffff-ffff-ffff-ffff-ffffffffffff'));
185+
$this->assertTrue(Uuid::isValid('FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF'));
186+
$this->assertTrue(Uuid::isValid('fFFFFFFF-ffff-FFFF-FFFF-FFFFffFFFFFF'));
187+
188+
$this->assertFalse(UuidV5::isValid('ffffffff-ffff-ffff-ffff-ffffffffffff'));
189+
$this->assertFalse(UuidV6::isValid('ffffffff-ffff-ffff-ffff-ffffffffffff'));
190+
}
191+
173192
public function testEquals()
174193
{
175194
$uuid1 = new UuidV1(self::A_UUID_V1);

‎src/Symfony/Component/Uid/Uuid.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Uid/Uuid.php
+9-1Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public static function fromString(string $uuid): parent
5858
$uuid = substr_replace($uuid, '-', 18, 0);
5959
$uuid = substr_replace($uuid, '-', 23, 0);
6060
} elseif (26 === \strlen($uuid) && Ulid::isValid($uuid)) {
61-
$ulid = new Ulid('00000000000000000000000000');
61+
$ulid = new NilUlid();
6262
$ulid->uid = strtoupper($uuid);
6363
$uuid = $ulid->toRfc4122();
6464
}
@@ -117,6 +117,14 @@ final public static function v6(): UuidV6
117117

118118
public static function isValid(string $uuid): bool
119119
{
120+
if (self::NIL === $uuid && \in_array(static::class, [__CLASS__, NilUuid::class], true)) {
121+
return true;
122+
}
123+
124+
if (__CLASS__ === static::class && 'ffffffff-ffff-ffff-ffff-ffffffffffff' === strtr($uuid, 'F', 'f')) {
125+
return true;
126+
}
127+
120128
if (!preg_match('{^[0-9a-f]{8}(?:-[0-9a-f]{4}){2}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$}Di', $uuid)) {
121129
return false;
122130
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.