28
28
29
29
const bson_validate_flags_t _mongoc_default_insert_vflags =
30
30
BSON_VALIDATE_UTF8 | BSON_VALIDATE_UTF8_ALLOW_NULL |
31
- BSON_VALIDATE_EMPTY_KEYS | BSON_VALIDATE_DOT_KEYS |
32
- BSON_VALIDATE_DOLLAR_KEYS ;
31
+ BSON_VALIDATE_EMPTY_KEYS ;
33
32
34
33
const bson_validate_flags_t _mongoc_default_replace_vflags =
35
34
BSON_VALIDATE_UTF8 | BSON_VALIDATE_UTF8_ALLOW_NULL |
36
- BSON_VALIDATE_EMPTY_KEYS | BSON_VALIDATE_DOT_KEYS |
37
- BSON_VALIDATE_DOLLAR_KEYS ;
35
+ BSON_VALIDATE_EMPTY_KEYS ;
38
36
39
37
const bson_validate_flags_t _mongoc_default_update_vflags =
40
38
BSON_VALIDATE_UTF8 | BSON_VALIDATE_UTF8_ALLOW_NULL |
@@ -324,6 +322,8 @@ _mongoc_validate_replace (const bson_t *doc,
324
322
bson_error_t * error )
325
323
{
326
324
bson_error_t validate_err ;
325
+ bson_iter_t iter ;
326
+ const char * key ;
327
327
328
328
if (vflags == BSON_VALIDATE_NONE ) {
329
329
return true;
@@ -338,6 +338,27 @@ _mongoc_validate_replace (const bson_t *doc,
338
338
return false;
339
339
}
340
340
341
+ if (!bson_iter_init (& iter , doc )) {
342
+ bson_set_error (error ,
343
+ MONGOC_ERROR_BSON ,
344
+ MONGOC_ERROR_BSON_INVALID ,
345
+ "replace document is corrupt" );
346
+ return false;
347
+ }
348
+
349
+ while (bson_iter_next (& iter )) {
350
+ key = bson_iter_key (& iter );
351
+ if (key [0 ] == '$' ) {
352
+ bson_set_error (error ,
353
+ MONGOC_ERROR_COMMAND ,
354
+ MONGOC_ERROR_COMMAND_INVALID_ARG ,
355
+ "Invalid key '%s': replace prohibits $ operators" ,
356
+ key );
357
+
358
+ return false;
359
+ }
360
+ }
361
+
341
362
return true;
342
363
}
343
364
0 commit comments