Uploaded image for project: 'C++ Driver'
  1. C++ Driver
  2. CXX-1845

mongocxx::uri call works with c char* parameter but not with c++ string parameter

    • Type: Icon: Bug Bug
    • Resolution: Duplicate
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: 3.4.0
    • Component/s: Implementation
    • None
    • Environment:
      Windows

      Hi All,

       

      If I simply call this function:

      mongocxx::uri uri = mongocxx::uri(ServerSetup::mongoUri().c_str());
      

      with C type char* parameter like above, it works, but if I call it with a c++ type string like this:

      mongocxx::uri uri = mongocxx::uri(ServerSetup::mongoUri());
      

      then it crashes with null pointer. See the message in file attachment.

       

      My full code is the following:

       

      #include <cstdint>
      
      #include <iostream>
      
      #include <vector>
      
      #include <string>
      
      #include <mongocxx/instance.hpp>
      
      #include <bsoncxx/json.hpp>
      
      #include <bsoncxx/string/view_or_value.hpp>
      
      #include <mongocxx/client.hpp>
      
      #include <mongocxx/collection.hpp>
      
      #include <mongocxx/stdx.hpp>
      
      #include <mongocxx/uri.hpp>
      
       
      
      class ServerSetup
      
      {
      
      public:
      
          const static std::string& mongoUri();
      
              
      
      private:
      
          static std::string MongoUri;
      
      };
      
       
      
      std::string ServerSetup::MongoUri = "mongodb://my_server/?ssl=true";
      
       
      
      const std::string& ServerSetup::mongoUri()
      
      { return MongoUri; }
      
       
      
      int main()
      
      {  
      
          try
      
          {
      
              mongocxx::instance instance{};
      
              mongocxx::uri uri = mongocxx::uri(ServerSetup::mongoUri());
      
          }
      
          catch (std::exception& ex)
      
          {
      
              std::cout << "std::excetpion caught: " << ex.what();
      
          }
      
          catch (...)
      
          {
      
              std::cout << "unknown excetpion caught";
      
          }
      
          return 0;
      
      }
      

       

      It doesn't seem to be correct.

      (It doesn't work with either non-static string parameter, but I then I got an exception, like "an invalid MongoDB URI was provided". But the non-static string was working if I convert it with c_str() as above.)

      Please me with this issue.

       

      Regards,

      Balázs

       

        1. mongoUriError.png
          16 kB
          Balazs Gerjak

            Assignee:
            Unassigned Unassigned
            Reporter:
            bmailggreen@gmail.com Balazs Gerjak
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: