From 1ad6f436b5cd937dfc9d91c284920efddd6ad185 Mon Sep 17 00:00:00 2001 From: Herbert Dürr Date: Thu, 2 May 2013 09:24:10 +0000 Subject: protect UNO EnvStack's s_setCurrent() against unknown threadid untracked threadIds have been observed and can result in crashes. s_getCurrent() already checks them and s_setCurrent() does it now. (cherry picked from commit bf8e3135ac906ce0ab7d6d9ccbd434f1597f2ff4) Conflicts: cppu/source/uno/EnvStack.cxx Change-Id: If35237179c1ee3b854e6183294ed72a6d0b105a8 --- cppu/source/uno/EnvStack.cxx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'cppu') diff --git a/cppu/source/uno/EnvStack.cxx b/cppu/source/uno/EnvStack.cxx index cafd4fe23b75..22d7bd992909 100644 --- a/cppu/source/uno/EnvStack.cxx +++ b/cppu/source/uno/EnvStack.cxx @@ -74,10 +74,15 @@ static void s_setCurrent(uno_Environment * pEnv) osl::MutexGuard guard(s_threadMap_mutex::get()); ThreadMap &rThreadMap = s_threadMap::get(); if (pEnv) + { rThreadMap[threadId] = pEnv; - + } else - rThreadMap.erase(threadId); + { + ThreadMap::iterator iEnv = rThreadMap.find(threadId); + if( iEnv != rThreadMap.end()) + rThreadMap.erase(iEnv); + } } static uno_Environment * s_getCurrent(void) -- cgit