CDRIVER-5515 fix assert when legacy exhaust cursor receives no documents #1562
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Fixes a failed assert when an exhaust cursor receives no documents:
Changes verified with a patch build testing all server 3.6 tasks. 3.6 uses legacy exhaust cursors.
Analysis
Regression was introduced in 6f58b9d.
On the prior commit, the call to
bson_reader_new_from_data
was the following:response->rpc.reply.documents
was always non-NULL. When no documents are received, the pointer is assigned the address of the end of the OP_REPLY.6f58b9d changed to use
mcd_rpc_op_reply_get_documents
:mcd_rpc_op_reply_get_documents
returns NULL if there are no documents. This causes the assert failure inbson_reader_new_from_data
.This PR does not change behavior of
mcd_rpc_op_reply_get_documents
. ReturningNULL
is documented behavior. Thoughmcd_rpc_op_reply_get_documents
is not in a public header, it is expected to be used by the Serverless Proxy (as part of CDRIVER-4625).