@@ -228,24 +228,65 @@ static void _test_mc_FLE2InsertUpdatePayloadV2_parses_crypto_params(_mongocrypt_
228228}
229229
230230static void _test_mc_FLE2InsertUpdatePayloadV2_parse_errors (_mongocrypt_tester_t * tester ) {
231- bson_t * input_bson = TMP_BSON_STR (BSON_STR ({
232- "d" : {"$binary" : {"base64" : "AAAA ", " subType " : " 00 "}}, //
233- " t " : " wrong type !"
234- }));
235- _mongocrypt_buffer_t input_buf ;
236- _mongocrypt_buffer_init_size (& input_buf , 1 + input_bson -> len );
237- input_buf .data [0 ] = (uint8_t )MC_SUBTYPE_FLE2InsertUpdatePayloadV2 ;
238- memcpy (input_buf .data + 1 , bson_get_data (input_bson ), input_bson -> len );
231+ // Test wrong type for 't':
232+ {
233+ bson_t * input_bson = TMP_BSON_STR (BSON_STR ({
234+ "d" : {"$binary" : {"base64" : "AAAA ", " subType " : " 00 "}}, //
235+ " t " : " wrong type !"
236+ }));
237+ _mongocrypt_buffer_t input_buf ;
238+ _mongocrypt_buffer_init_size (& input_buf , 1 + input_bson -> len );
239+ input_buf .data [0 ] = (uint8_t )MC_SUBTYPE_FLE2InsertUpdatePayloadV2 ;
240+ memcpy (input_buf .data + 1 , bson_get_data (input_bson ), input_bson -> len );
241+
242+ mc_FLE2InsertUpdatePayloadV2_t payload ;
243+ mc_FLE2InsertUpdatePayloadV2_init (& payload );
244+ mongocrypt_status_t * status = mongocrypt_status_new ();
245+ ASSERT_FAILS_STATUS (mc_FLE2InsertUpdatePayloadV2_parse (& payload , & input_buf , status ),
246+ status ,
247+ "Field 't' expected to hold an int32" );
248+ mc_FLE2InsertUpdatePayloadV2_cleanup (& payload );
249+ mongocrypt_status_destroy (status );
250+ _mongocrypt_buffer_cleanup (& input_buf );
251+ }
239252
240- mc_FLE2InsertUpdatePayloadV2_t payload ;
241- mc_FLE2InsertUpdatePayloadV2_init (& payload );
242- mongocrypt_status_t * status = mongocrypt_status_new ();
243- ASSERT_FAILS_STATUS (mc_FLE2InsertUpdatePayloadV2_parse (& payload , & input_buf , status ),
244- status ,
245- "Field 't' expected to hold an int32" );
246- mc_FLE2InsertUpdatePayloadV2_cleanup (& payload );
247- mongocrypt_status_destroy (status );
248- _mongocrypt_buffer_cleanup (& input_buf );
253+ // Test negative 'k':
254+ {
255+ bson_t * input_bson = TMP_BSON_STR (BSON_STR ({"k" : {"$numberLong" : "-1" }}));
256+ _mongocrypt_buffer_t input_buf ;
257+ _mongocrypt_buffer_init_size (& input_buf , 1 + input_bson -> len );
258+ input_buf .data [0 ] = (uint8_t )MC_SUBTYPE_FLE2InsertUpdatePayloadV2 ;
259+ memcpy (input_buf .data + 1 , bson_get_data (input_bson ), input_bson -> len );
260+
261+ mc_FLE2InsertUpdatePayloadV2_t payload ;
262+ mc_FLE2InsertUpdatePayloadV2_init (& payload );
263+ mongocrypt_status_t * status = mongocrypt_status_new ();
264+ ASSERT_FAILS_STATUS (mc_FLE2InsertUpdatePayloadV2_parse (& payload , & input_buf , status ),
265+ status ,
266+ "contention must be non-negative" );
267+ mc_FLE2InsertUpdatePayloadV2_cleanup (& payload );
268+ mongocrypt_status_destroy (status );
269+ _mongocrypt_buffer_cleanup (& input_buf );
270+ }
271+
272+ // Test negative 'sp':
273+ {
274+ bson_t * input_bson = TMP_BSON_STR (BSON_STR ({"sp" : {"$numberLong" : "-1" }}));
275+ _mongocrypt_buffer_t input_buf ;
276+ _mongocrypt_buffer_init_size (& input_buf , 1 + input_bson -> len );
277+ input_buf .data [0 ] = (uint8_t )MC_SUBTYPE_FLE2InsertUpdatePayloadV2 ;
278+ memcpy (input_buf .data + 1 , bson_get_data (input_bson ), input_bson -> len );
279+
280+ mc_FLE2InsertUpdatePayloadV2_t payload ;
281+ mc_FLE2InsertUpdatePayloadV2_init (& payload );
282+ mongocrypt_status_t * status = mongocrypt_status_new ();
283+ ASSERT_FAILS_STATUS (mc_FLE2InsertUpdatePayloadV2_parse (& payload , & input_buf , status ),
284+ status ,
285+ "sparsity must be non-negative" );
286+ mc_FLE2InsertUpdatePayloadV2_cleanup (& payload );
287+ mongocrypt_status_destroy (status );
288+ _mongocrypt_buffer_cleanup (& input_buf );
289+ }
249290}
250291
251292void _mongocrypt_tester_install_fle2_payload_iup_v2 (_mongocrypt_tester_t * tester ) {
0 commit comments