DRTVWR-476: Use OpenSSL API suitable for 64-bit pointers.
In three different places we use the same pattern: an ssl_thread_id_callback() function (a static member of LLCrashLogger, in that case) that used to be passed to CRYPTO_set_id_callback() and therefore returned an unsigned long representing the ID of the current thread. But GetCurrentThread() is a HANDLE, an alias for a pointer, and you can't uniquely cram a 64-bit pointer into an unsigned long. Fortunately OpenSSL has a more modern API for retrieving thread ID. Pass each ssl_thread_id_callback() function to CRYPTO_THREADID_set_callback() instead, converting it to accept CRYPTO_THREADID* and call CRYPTO_THREADID_set_pointer() or CRYPTO_THREADID_set_numeric() as appropriate().master
parent
cbbe655f27
commit
3753dbd5ed
|
|
@ -52,7 +52,7 @@
|
|||
|
||||
void init_curl();
|
||||
void term_curl();
|
||||
unsigned long ssl_thread_id_callback(void);
|
||||
void ssl_thread_id_callback(CRYPTO_THREADID*);
|
||||
void ssl_locking_callback(int mode, int type, const char * file, int line);
|
||||
void usage(std::ostream & out);
|
||||
|
||||
|
|
@ -624,7 +624,7 @@ void init_curl()
|
|||
}
|
||||
|
||||
CRYPTO_set_locking_callback(ssl_locking_callback);
|
||||
CRYPTO_set_id_callback(ssl_thread_id_callback);
|
||||
CRYPTO_THREADID_set_callback(ssl_thread_id_callback);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -640,12 +640,12 @@ void term_curl()
|
|||
}
|
||||
|
||||
|
||||
unsigned long ssl_thread_id_callback(void)
|
||||
void ssl_thread_id_callback(CRYPTO_THREADID* pthreadid)
|
||||
{
|
||||
#if defined(WIN32)
|
||||
return (unsigned long) GetCurrentThread();
|
||||
CRYPTO_THREADID_set_pointer(pthreadid, GetCurrentThread());
|
||||
#else
|
||||
return (unsigned long) pthread_self();
|
||||
CRYPTO_THREADID_set_numeric(pthreadid, pthread_self());
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@
|
|||
#include "llproxy.h"
|
||||
#include "llcleanup.h"
|
||||
|
||||
unsigned long ssl_thread_id_callback(void);
|
||||
void ssl_thread_id_callback(CRYPTO_THREADID*);
|
||||
void ssl_locking_callback(int mode, int type, const char * file, int line);
|
||||
|
||||
#if 0 // lltut provides main and runner
|
||||
|
|
@ -93,7 +93,7 @@ void init_curl()
|
|||
}
|
||||
|
||||
CRYPTO_set_locking_callback(ssl_locking_callback);
|
||||
CRYPTO_set_id_callback(ssl_thread_id_callback);
|
||||
CRYPTO_THREADID_set_callback(ssl_thread_id_callback);
|
||||
}
|
||||
|
||||
LLProxy::getInstance();
|
||||
|
|
@ -113,12 +113,12 @@ void term_curl()
|
|||
}
|
||||
|
||||
|
||||
unsigned long ssl_thread_id_callback(void)
|
||||
void ssl_thread_id_callback(CRYPTO_THREADID* pthreadid)
|
||||
{
|
||||
#if defined(WIN32)
|
||||
return (unsigned long) GetCurrentThread();
|
||||
CRYPTO_THREADID_set_pointer(pthreadid, GetCurrentThread());
|
||||
#else
|
||||
return (unsigned long) pthread_self();
|
||||
CRYPTO_THREADID_set_numeric(pthreadid, pthread_self());
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -172,5 +172,3 @@ void stop_thread(LLCore::HttpRequest * req)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -642,7 +642,7 @@ void LLCrashLogger::init_curl()
|
|||
}
|
||||
|
||||
CRYPTO_set_locking_callback(ssl_locking_callback);
|
||||
CRYPTO_set_id_callback(ssl_thread_id_callback);
|
||||
CRYPTO_THREADID_set_callback(ssl_thread_id_callback);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -658,12 +658,12 @@ void LLCrashLogger::term_curl()
|
|||
}
|
||||
|
||||
|
||||
unsigned long LLCrashLogger::ssl_thread_id_callback(void)
|
||||
void LLCrashLogger::ssl_thread_id_callback(CRYPTO_THREADID* pthreadid)
|
||||
{
|
||||
#if LL_WINDOWS
|
||||
return (unsigned long)GetCurrentThread();
|
||||
CRYPTO_THREADID_set_pointer(pthreadid, GetCurrentThread());
|
||||
#else
|
||||
return (unsigned long)pthread_self();
|
||||
CRYPTO_THREADID_set_numeric(pthreadid, pthread_self());
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,6 +36,11 @@
|
|||
#include "llcrashlock.h"
|
||||
#include "_mutex.h"
|
||||
|
||||
// We shouldn't have to know the exact declaration of CRYPTO_THREADID, but VS
|
||||
// 2017 complains if we forward-declare it as simply 'struct CRYPTO_THREADID'.
|
||||
struct crypto_threadid_st;
|
||||
typedef crypto_threadid_st CRYPTO_THREADID;
|
||||
|
||||
// Crash reporter behavior
|
||||
const S32 CRASH_BEHAVIOR_ASK = 0;
|
||||
const S32 CRASH_BEHAVIOR_ALWAYS_SEND = 1;
|
||||
|
|
@ -68,7 +73,7 @@ public:
|
|||
protected:
|
||||
static void init_curl();
|
||||
static void term_curl();
|
||||
static unsigned long ssl_thread_id_callback(void);
|
||||
static void ssl_thread_id_callback(CRYPTO_THREADID*);
|
||||
static void ssl_locking_callback(int mode, int type, const char * file, int line);
|
||||
|
||||
S32 mCrashBehavior;
|
||||
|
|
|
|||
Loading…
Reference in New Issue