Skip to content

Commit af23cb2

Browse files
committed
PHPLIB-1679 Call DocumentCodec::encode() only on objects
1 parent 36294df commit af23cb2

File tree

5 files changed

+16
-19
lines changed

5 files changed

+16
-19
lines changed

src/Operation/BulkWrite.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
use function current;
3636
use function is_array;
3737
use function is_bool;
38+
use function is_object;
3839
use function key;
3940
use function MongoDB\is_document;
4041
use function MongoDB\is_first_key_operator;
@@ -305,7 +306,7 @@ private function validateOperations(array $operations, ?DocumentCodec $codec, En
305306
case self::INSERT_ONE:
306307
// $args[0] was already validated above. Since DocumentCodec::encode will always return a Document
307308
// instance, there is no need to re-validate the returned value here.
308-
if ($codec) {
309+
if ($codec && is_object($args[0])) {
309310
$operations[$i][$type][0] = $codec->encode($args[0]);
310311
}
311312

@@ -340,7 +341,7 @@ private function validateOperations(array $operations, ?DocumentCodec $codec, En
340341
throw new InvalidArgumentException(sprintf('Missing second argument for $operations[%d]["%s"]', $i, $type));
341342
}
342343

343-
if ($codec) {
344+
if ($codec && is_object($args[1])) {
344345
$operations[$i][$type][1] = $codec->encode($args[1]);
345346
}
346347

src/Operation/FindOneAndReplace.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
use function array_key_exists;
2727
use function is_integer;
28+
use function is_object;
2829
use function MongoDB\is_document;
2930
use function MongoDB\is_first_key_operator;
3031
use function MongoDB\is_pipeline;
@@ -170,11 +171,9 @@ public function getCommandDocument(): array
170171

171172
private function validateReplacement(array|object $replacement, ?DocumentCodec $codec): array|object
172173
{
173-
if (isset($codec)) {
174+
if ($codec && is_object($replacement)) {
174175
$replacement = $codec->encode($replacement);
175-
}
176-
177-
if (! is_document($replacement)) {
176+
} elseif (! is_document($replacement)) {
178177
throw InvalidArgumentException::expectedDocumentType('$replacement', $replacement);
179178
}
180179

src/Operation/InsertMany.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
use function array_is_list;
3131
use function is_bool;
32+
use function is_object;
3233
use function MongoDB\is_document;
3334
use function sprintf;
3435

@@ -189,11 +190,9 @@ private function validateDocuments(array $documents, ?DocumentCodec $codec): arr
189190
}
190191

191192
foreach ($documents as $i => $document) {
192-
if ($codec) {
193-
$document = $documents[$i] = $codec->encode($document);
194-
}
195-
196-
if (! is_document($document)) {
193+
if ($codec && is_object($document)) {
194+
$documents[$i] = $codec->encode($document);
195+
} elseif (! is_document($document)) {
197196
throw InvalidArgumentException::expectedDocumentType(sprintf('$documents[%d]', $i), $document);
198197
}
199198
}

src/Operation/InsertOne.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
use MongoDB\InsertOneResult;
2929

3030
use function is_bool;
31+
use function is_object;
3132
use function MongoDB\is_document;
3233

3334
/**
@@ -156,11 +157,9 @@ private function createExecuteOptions(): array
156157

157158
private function validateDocument(array|object $document, ?DocumentCodec $codec): array|object
158159
{
159-
if ($codec) {
160+
if ($codec && is_object($document)) {
160161
$document = $codec->encode($document);
161-
}
162-
163-
if (! is_document($document)) {
162+
} elseif (! is_document($document)) {
164163
throw InvalidArgumentException::expectedDocumentType('$document', $document);
165164
}
166165

src/Operation/ReplaceOne.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
use MongoDB\Exception\UnsupportedException;
2525
use MongoDB\UpdateResult;
2626

27+
use function is_object;
2728
use function MongoDB\is_document;
2829
use function MongoDB\is_first_key_operator;
2930
use function MongoDB\is_pipeline;
@@ -119,11 +120,9 @@ public function execute(Server $server): UpdateResult
119120

120121
private function validateReplacement(array|object $replacement, ?DocumentCodec $codec): array|object
121122
{
122-
if ($codec) {
123+
if ($codec && is_object($replacement)) {
123124
$replacement = $codec->encode($replacement);
124-
}
125-
126-
if (! is_document($replacement)) {
125+
} elseif (! is_document($replacement)) {
127126
throw InvalidArgumentException::expectedDocumentType('$replacement', $replacement);
128127
}
129128

0 commit comments

Comments
 (0)