2828namespace mongocxx {
2929MONGOCXX_INLINE_NAMESPACE_BEGIN
3030
31+ namespace {
32+
33+ // Some of the 'uri_get_*' string accessors may return nullptr.
34+ // Check for this case and convert to the empty string.
35+ std::string to_string_null_safe (const char * str) {
36+ if (str == nullptr ) {
37+ return std::string{};
38+ }
39+ return str;
40+ }
41+
42+ } // namespace
43+
3144const std::string uri::k_default_uri = " mongodb://localhost:27017" ;
3245
3346uri::uri (std::unique_ptr<impl>&& implementation) {
@@ -47,15 +60,15 @@ uri& uri::operator=(uri&&) noexcept = default;
4760uri::~uri () = default ;
4861
4962std::string uri::auth_mechanism () const {
50- return libmongoc::uri_get_auth_mechanism (_impl->uri_t );
63+ return to_string_null_safe ( libmongoc::uri_get_auth_mechanism (_impl->uri_t ) );
5164}
5265
5366std::string uri::auth_source () const {
5467 return libmongoc::uri_get_auth_source (_impl->uri_t );
5568}
5669
5770std::string uri::database () const {
58- return libmongoc::uri_get_database (_impl->uri_t );
71+ return to_string_null_safe ( libmongoc::uri_get_database (_impl->uri_t ) );
5972}
6073
6174std::vector<uri::host> uri::hosts () const {
@@ -75,7 +88,7 @@ bsoncxx::document::view uri::options() const {
7588}
7689
7790std::string uri::password () const {
78- return libmongoc::uri_get_password (_impl->uri_t );
91+ return to_string_null_safe ( libmongoc::uri_get_password (_impl->uri_t ) );
7992}
8093
8194class read_concern uri::read_concern () const {
@@ -91,7 +104,7 @@ class read_preference uri::read_preference() const {
91104}
92105
93106std::string uri::replica_set () const {
94- return libmongoc::uri_get_replica_set (_impl->uri_t );
107+ return to_string_null_safe ( libmongoc::uri_get_replica_set (_impl->uri_t ) );
95108}
96109
97110std::string uri::to_string () const {
@@ -103,7 +116,7 @@ bool uri::ssl() const {
103116}
104117
105118std::string uri::username () const {
106- return libmongoc::uri_get_username (_impl->uri_t );
119+ return to_string_null_safe ( libmongoc::uri_get_username (_impl->uri_t ) );
107120}
108121
109122class write_concern uri::write_concern () const {
0 commit comments