@@ -340,9 +340,15 @@ _bson_append_va (bson_t *bson, /* IN */
340340
341341 do {
342342 n_pairs -- ;
343- memcpy (buf , data , data_len );
344- bson -> len += data_len ;
345- buf += data_len ;
343+ /* data may be NULL if data_len is 0. memcpy is not safe to call with NULL. */
344+ if (BSON_LIKELY (data_len != 0 && data != NULL )) {
345+ memcpy (buf , data , data_len );
346+ bson -> len += data_len ;
347+ buf += data_len ;
348+ } else if (BSON_UNLIKELY (data_len != 0 && data == NULL )) {
349+ /* error, user appending NULL with non-zero length. */
350+ return false;
351+ }
346352
347353 if (n_pairs ) {
348354 data_len = va_arg (args , uint32_t );
@@ -816,7 +822,6 @@ bson_append_binary (bson_t *bson, /* IN */
816822
817823 BSON_ASSERT (bson );
818824 BSON_ASSERT (key );
819- BSON_ASSERT (binary );
820825
821826 if (key_length < 0 ) {
822827 key_length = (int ) strlen (key );
@@ -2580,9 +2585,9 @@ _bson_as_json_visit_int64 (const bson_iter_t *iter,
25802585
25812586 if (state -> mode == BSON_JSON_MODE_CANONICAL ) {
25822587 bson_string_append_printf (
2583- state -> str , "{ \"$numberLong\" : \"%" PRId64 "\"}" , v_int64 );
2588+ state -> str , "{ \"$numberLong\" : \"%" "lld" "\"}" , v_int64 );
25842589 } else {
2585- bson_string_append_printf (state -> str , "%" PRId64 , v_int64 );
2590+ bson_string_append_printf (state -> str , "%" "lld" , v_int64 );
25862591 }
25872592
25882593 return false;
@@ -2760,15 +2765,15 @@ _bson_as_json_visit_date_time (const bson_iter_t *iter,
27602765 if (state -> mode == BSON_JSON_MODE_CANONICAL ||
27612766 (state -> mode == BSON_JSON_MODE_RELAXED && msec_since_epoch < 0 )) {
27622767 bson_string_append (state -> str , "{ \"$date\" : { \"$numberLong\" : \"" );
2763- bson_string_append_printf (state -> str , "%" PRId64 , msec_since_epoch );
2768+ bson_string_append_printf (state -> str , "%" "lld" , msec_since_epoch );
27642769 bson_string_append (state -> str , "\" } }" );
27652770 } else if (state -> mode == BSON_JSON_MODE_RELAXED ) {
27662771 bson_string_append (state -> str , "{ \"$date\" : \"" );
27672772 _bson_iso8601_date_format (msec_since_epoch , state -> str );
27682773 bson_string_append (state -> str , "\" }" );
27692774 } else {
27702775 bson_string_append (state -> str , "{ \"$date\" : " );
2771- bson_string_append_printf (state -> str , "%" PRId64 , msec_since_epoch );
2776+ bson_string_append_printf (state -> str , "%" "lld" , msec_since_epoch );
27722777 bson_string_append (state -> str , " }" );
27732778 }
27742779
0 commit comments