@@ -886,6 +886,18 @@ _mongoc_cursor_monitor_failed (mongoc_cursor_t *cursor,
886886 BSON_APPEND_DOCUMENT (query, "$" #_legacy_name, &subdocument); \
887887} while (false)
888888
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);
889901
890902static bool
891903_mongoc_cursor_flags (mongoc_cursor_t * cursor ,
@@ -907,17 +919,17 @@ _mongoc_cursor_flags (mongoc_cursor_t *cursor,
907919 key = bson_iter_key (& iter );
908920
909921 if (!strcmp (key , ALLOW_PARTIAL_RESULTS )) {
910- OPT_FLAG ( MONGOC_QUERY_PARTIAL );
922+ ADD_FLAG ( flags , MONGOC_QUERY_PARTIAL );
911923 } else if (!strcmp (key , AWAIT_DATA )) {
912- OPT_FLAG ( MONGOC_QUERY_AWAIT_DATA );
924+ ADD_FLAG ( flags , MONGOC_QUERY_AWAIT_DATA );
913925 } else if (!strcmp (key , EXHAUST )) {
914- OPT_FLAG ( MONGOC_QUERY_EXHAUST );
926+ ADD_FLAG ( flags , MONGOC_QUERY_EXHAUST );
915927 } else if (!strcmp (key , NO_CURSOR_TIMEOUT )) {
916- OPT_FLAG ( MONGOC_QUERY_NO_CURSOR_TIMEOUT );
928+ ADD_FLAG ( flags , MONGOC_QUERY_NO_CURSOR_TIMEOUT );
917929 } else if (!strcmp (key , OPLOG_REPLAY )) {
918- OPT_FLAG ( MONGOC_QUERY_OPLOG_REPLAY );
930+ ADD_FLAG ( flags , MONGOC_QUERY_OPLOG_REPLAY );
919931 } else if (!strcmp (key , TAILABLE )) {
920- OPT_FLAG ( MONGOC_QUERY_TAILABLE_CURSOR );
932+ ADD_FLAG ( flags , MONGOC_QUERY_TAILABLE_CURSOR );
921933 }
922934 }
923935
0 commit comments