diff --git a/src/options/DefaultOptions.cpp b/src/options/DefaultOptions.cpp index 6d70eb3..d8f2d19 100644 --- a/src/options/DefaultOptions.cpp +++ b/src/options/DefaultOptions.cpp @@ -32,7 +32,7 @@ namespace sql { static const int32_t SocketTimeoutDefault[]= {30000, 0, 0, 0, 0, 0}; std::map OptionsMap{ - { "user", {"user", "0.9.1", "Database user name", false} }, + {"user", {"user", "0.9.1", "Database user name", false} }, {"password", {"password", "0.9.1", "Password of the database user", false} }, /** @@ -882,7 +882,7 @@ namespace sql { for (auto& it : properties) { - const std::string& key= StringImp::get(it.first); + std::string key(it.first.c_str(), it.first.length()); SQLString propertyValue(it.second); auto cit= OPTIONS_MAP.find(key); diff --git a/test/unit/classes/connection.cpp b/test/unit/classes/connection.cpp index b3d957a..a4dd9c7 100644 --- a/test/unit/classes/connection.cpp +++ b/test/unit/classes/connection.cpp @@ -3225,5 +3225,20 @@ void connection::bugConCpp21() } +void connection::unknownPropertyConnect() +{ + sql::Properties p; + + p["user"]= user; + + con.reset(driver->connect(url + "?password=" + passwd + "¬ExistentPropery=blahblah", p)); + ASSERT(con.get() == nullptr); + p["hostName"]= url; + p["password"]= passwd; + p["notExistentPropery"]= "blahblah"; + con.reset(driver->connect(p)); + ASSERT(con.get() == nullptr); +} + } /* namespace connection */ } /* namespace testsuite */ diff --git a/test/unit/classes/connectiontest.h b/test/unit/classes/connectiontest.h index 1e3ac8c..3b22a16 100644 --- a/test/unit/classes/connectiontest.h +++ b/test/unit/classes/connectiontest.h @@ -87,6 +87,7 @@ public: TEST_CASE(tls_version); TEST_CASE(cached_sha2_auth); TEST_CASE(bugConCpp21); + TEST_CASE(unknownPropertyConnect); } /** @@ -266,6 +267,9 @@ public: * URL overrides properties instead of the opposite */ void bugConCpp21(); + + /* Unknown properties cause nullptr for connect() and exception for getConnection() */ + void unknownPropertyConnect(); };