@@ -886,6 +886,18 @@ _mongoc_cursor_monitor_failed (mongoc_cursor_t *cursor,
886
886
BSON_APPEND_DOCUMENT (query, "$" #_legacy_name, &subdocument); \
887
887
} while (false)
888
888
889
+ #define ADD_FLAG (_flags , _value ) do { \
890
+ if (!BSON_ITER_HOLDS_BOOL(&iter)) { \
891
+ bson_set_error (&cursor->error, \
892
+ MONGOC_ERROR_COMMAND, \
893
+ MONGOC_ERROR_COMMAND_INVALID_ARG, \
894
+ "invalid option %s, should be type bool", key); \
895
+ return false; \
896
+ } \
897
+ if (bson_iter_as_bool (&iter)) { \
898
+ *_flags |= _value; \
899
+ } \
900
+ } while (false);
889
901
890
902
static bool
891
903
_mongoc_cursor_flags (mongoc_cursor_t * cursor ,
@@ -907,17 +919,17 @@ _mongoc_cursor_flags (mongoc_cursor_t *cursor,
907
919
key = bson_iter_key (& iter );
908
920
909
921
if (!strcmp (key , ALLOW_PARTIAL_RESULTS )) {
910
- OPT_FLAG ( MONGOC_QUERY_PARTIAL );
922
+ ADD_FLAG ( flags , MONGOC_QUERY_PARTIAL );
911
923
} else if (!strcmp (key , AWAIT_DATA )) {
912
- OPT_FLAG ( MONGOC_QUERY_AWAIT_DATA );
924
+ ADD_FLAG ( flags , MONGOC_QUERY_AWAIT_DATA );
913
925
} else if (!strcmp (key , EXHAUST )) {
914
- OPT_FLAG ( MONGOC_QUERY_EXHAUST );
926
+ ADD_FLAG ( flags , MONGOC_QUERY_EXHAUST );
915
927
} else if (!strcmp (key , NO_CURSOR_TIMEOUT )) {
916
- OPT_FLAG ( MONGOC_QUERY_NO_CURSOR_TIMEOUT );
928
+ ADD_FLAG ( flags , MONGOC_QUERY_NO_CURSOR_TIMEOUT );
917
929
} else if (!strcmp (key , OPLOG_REPLAY )) {
918
- OPT_FLAG ( MONGOC_QUERY_OPLOG_REPLAY );
930
+ ADD_FLAG ( flags , MONGOC_QUERY_OPLOG_REPLAY );
919
931
} else if (!strcmp (key , TAILABLE )) {
920
- OPT_FLAG ( MONGOC_QUERY_TAILABLE_CURSOR );
932
+ ADD_FLAG ( flags , MONGOC_QUERY_TAILABLE_CURSOR );
921
933
}
922
934
}
923
935
0 commit comments