Skip to content

Commit

Permalink
Backport of #1992 to 3.6
Browse files Browse the repository at this point in the history
Add preg_quote to value in getCount for Unique validation with DatabasePresenceVerifier.php in order to correctly escape regex chars in values from DB (eg. "+")

Co-Authored-By: andrei-gafton-rtgt <61140282+andrei-gafton-rtgt@users.noreply.github.com>
  • Loading branch information
divine and andrei-gafton-rtgt committed Dec 17, 2020
1 parent f76732c commit 97b0ed2
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 1 deletion.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Expand Up @@ -7,6 +7,8 @@ All notable changes to this project will be documented in this file.

### Changed
- MongodbQueueServiceProvider does not use the DB Facade anymore [#2149](https://github.com/jenssegers/laravel-mongodb/pull/2149) by [@curosmj](https://github.com/curosmj)
- Add escape regex chars to DB Presence Verifier [#1992](https://github.com/jenssegers/laravel-mongodb/pull/1992) by [@andrei-gafton-rtgt](https://github.com/andrei-gafton-rtgt).


## [3.6.6] - 2020-10-29

Expand Down
Expand Up @@ -16,7 +16,7 @@ class DatabasePresenceVerifier extends \Illuminate\Validation\DatabasePresenceVe
*/
public function getCount($collection, $column, $value, $excludeId = null, $idColumn = null, array $extra = [])
{
$query = $this->table($collection)->where($column, 'regex', "/$value/i");
$query = $this->table($collection)->where($column, 'regex', "/" . preg_quote($value) . "/i");

if ($excludeId !== null && $excludeId != 'NULL') {
$query->where($idColumn ?: 'id', '<>', $excludeId);
Expand Down
20 changes: 20 additions & 0 deletions tests/ValidationTest.php
Expand Up @@ -41,6 +41,26 @@ public function testUnique(): void
['name' => 'required|unique:users']
);
$this->assertFalse($validator->fails());

User::create(['name' => 'Johnny Cash', 'email' => 'johnny.cash+200@gmail.com']);

$validator = Validator::make(
['email' => 'johnny.cash+200@gmail.com'],
['email' => 'required|unique:users']
);
$this->assertTrue($validator->fails());

$validator = Validator::make(
['email' => 'johnny.cash+20@gmail.com'],
['email' => 'required|unique:users']
);
$this->assertFalse($validator->fails());

$validator = Validator::make(
['email' => 'johnny.cash+1@gmail.com'],
['email' => 'required|unique:users']
);
$this->assertFalse($validator->fails());
}

public function testExists(): void
Expand Down
1 change: 1 addition & 0 deletions tests/models/User.php
Expand Up @@ -13,6 +13,7 @@
* Class User
* @property string $_id
* @property string $name
* @property string $email
* @property string $title
* @property int $age
* @property \Carbon\Carbon $birthday
Expand Down

0 comments on commit 97b0ed2

Please sign in to comment.