8000 [Uid] Fix validating nil and max uuid · symfony/symfony@7b4230c · GitHub
[go: up one dir, main page]

Skip to content

Commit 7b4230c

Browse files
committed
[Uid] Fix validating nil and max uuid
1 parent 7fa6cea commit 7b4230c

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

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

Lines 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

Lines 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 (static::class === __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