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

XMLWordPrintableJSON

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

       

      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; }

      ;

      //Of course the real url would be different, not "my_server", but I can't share the company url with you
      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
          Balázs Gerják
        2. image003.png
          0.6 kB
          Balázs Gerják
        3. compilerError.png
          45 kB
          Balázs Gerják
        4. assertionErrorWithExampleCode.png
          16 kB
          Balázs Gerják
        5. ~WRD000.jpg
          0.8 kB
          Balázs Gerják

            Assignee:
            Kevin Albertson
            Reporter:
            Balázs Gerják
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: