]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[Core] Database handles: Fix possible hash collision in get_handle(). db_name 2385/head
authorAndrey Volk <andywolk@gmail.com>
Thu, 8 Feb 2024 11:41:01 +0000 (14:41 +0300)
committerAndrey Volk <andywolk@gmail.com>
Thu, 8 Feb 2024 11:41:01 +0000 (14:41 +0300)
src/switch_core_sqldb.c

index 165c9bd8b1ec2d0373b67cd840d632bb972a3872..9b52ee97197fc4933501643f5b85fb269fc3ed14 100644 (file)
@@ -195,7 +195,7 @@ static switch_cache_db_handle_t *get_handle(const char *db_str, const char *user
           This allows SQLite to read and write within a single thread, giving the same handle for both operations.
        */
        for (dbh_ptr = sql_manager.handle_pool; dbh_ptr; dbh_ptr = dbh_ptr->next) {
-               if (dbh_ptr->thread_hash == thread_hash && dbh_ptr->hash == hash &&
+               if (dbh_ptr->thread_hash == thread_hash && dbh_ptr->hash == hash && !strcmp(dbh_ptr->name, db_str) &&
                        !switch_test_flag(dbh_ptr, CDF_PRUNE) && switch_mutex_trylock(dbh_ptr->mutex) == SWITCH_STATUS_SUCCESS) {
                        r = dbh_ptr;
                        break;
@@ -207,7 +207,7 @@ static switch_cache_db_handle_t *get_handle(const char *db_str, const char *user
                   If a handle is in use, skip and create new one.
                */
                for (dbh_ptr = sql_manager.handle_pool; dbh_ptr; dbh_ptr = dbh_ptr->next) {
-                       if (dbh_ptr->hash == hash && !dbh_ptr->use_count && !switch_test_flag(dbh_ptr, CDF_PRUNE) &&
+                       if (dbh_ptr->hash == hash && !strcmp(dbh_ptr->name, db_str) && !dbh_ptr->use_count && !switch_test_flag(dbh_ptr, CDF_PRUNE) &&
                                switch_mutex_trylock(dbh_ptr->mutex) == SWITCH_STATUS_SUCCESS) {
                                r = dbh_ptr;
                                r->thread_hash = thread_hash;