From e7f38452ba6df1b9567bccb58cbda46f3de4a223 Mon Sep 17 00:00:00 2001 From: Andrey Volk Date: Thu, 8 Feb 2024 14:41:01 +0300 Subject: [PATCH] [Core] Database handles: Fix possible hash collision in get_handle(). --- src/switch_core_sqldb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c index 165c9bd8b1..9b52ee9719 100644 --- a/src/switch_core_sqldb.c +++ b/src/switch_core_sqldb.c @@ -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;