Skip to content

Commit 2e685d1

Browse files
authored
CDRIVER-3773 Support regular expressions with no options (#751)
1 parent 5a39ff0 commit 2e685d1

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

src/libbson/src/bson/bson-json.c

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,19 +1389,10 @@ _bson_json_read_append_regex (bson_json_reader_t *reader, /* IN */
13891389
"Missing \"$regex\" after \"$options\"");
13901390
return;
13911391
}
1392-
if (!data->regex.has_options) {
1393-
_bson_json_read_set_error (reader,
1394-
"Missing \"$options\" after \"$regex\"");
1395-
return;
1396-
}
13971392
} else if (!data->regex.has_pattern) {
13981393
_bson_json_read_set_error (
13991394
reader, "Missing \"pattern\" after \"options\" in regular expression");
14001395
return;
1401-
} else if (!data->regex.has_options) {
1402-
_bson_json_read_set_error (
1403-
reader, "Missing \"options\" after \"pattern\" in regular expression");
1404-
return;
14051396
}
14061397

14071398
if (!bson_append_regex (STACK_BSON_CHILD,

src/libbson/tests/test-json.c

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1075,13 +1075,12 @@ test_bson_json_read_legacy_regex (void)
10751075
bson_destroy (&b);
10761076

10771077
r = bson_init_from_json (&b, "{\"a\": {\"$regex\": \"abc\"}}", -1, &error);
1078-
BSON_ASSERT (!r);
1079-
ASSERT_ERROR_CONTAINS (error,
1080-
BSON_ERROR_JSON,
1081-
BSON_JSON_ERROR_READ_INVALID_PARAM,
1082-
"Missing \"$options\" after \"$regex\"");
1078+
ASSERT_OR_PRINT (r, error);
1079+
BCON_EXTRACT (&b, "a", BCONE_REGEX (pattern, flags));
1080+
ASSERT_CMPSTR (pattern, "abc");
1081+
ASSERT_CMPSTR (flags, "");
10831082

1084-
memset (&error, 0, sizeof error);
1083+
bson_destroy (&b);
10851084

10861085
r = bson_init_from_json (&b, "{\"a\": {\"$options\": \"ix\"}}", -1, &error);
10871086
BSON_ASSERT (!r);
@@ -1091,6 +1090,24 @@ test_bson_json_read_legacy_regex (void)
10911090
"Missing \"$regex\" after \"$options\"");
10921091
}
10931092

1093+
static void
1094+
test_bson_json_read_regex_no_options (void)
1095+
{
1096+
bson_t b;
1097+
bson_error_t error;
1098+
bool r;
1099+
const char *pattern;
1100+
const char *flags;
1101+
1102+
r = bson_init_from_json (
1103+
&b, "{\"a\": {\"$regularExpression\": { \"pattern\": \"abc\"}}}", -1, &error);
1104+
ASSERT_OR_PRINT (r, error);
1105+
BCON_EXTRACT (&b, "a", BCONE_REGEX (pattern, flags));
1106+
ASSERT_CMPSTR (pattern, "abc");
1107+
ASSERT_CMPSTR (flags, "");
1108+
1109+
bson_destroy (&b);
1110+
}
10941111

10951112
static void
10961113
test_bson_json_read_regex_options_order (void)
@@ -3451,6 +3468,8 @@ test_json_install (TestSuite *suite)
34513468
suite, "/bson/json/read/dbpointer", test_bson_json_read_dbpointer);
34523469
TestSuite_Add (
34533470
suite, "/bson/json/read/legacy_regex", test_bson_json_read_legacy_regex);
3471+
TestSuite_Add (
3472+
suite, "/bson/json/read/regex_no_options", test_bson_json_read_regex_no_options);
34543473
TestSuite_Add (suite,
34553474
"/bson/json/read/regex_options_order",
34563475
test_bson_json_read_regex_options_order);

0 commit comments

Comments
 (0)