mirror of https://code.videolan.org/videolan/vlc
Catch unsafe (but alas common) strerror()
This commit is contained in:
parent
c37501542c
commit
b67a5864cb
|
@ -33,6 +33,7 @@ void vlc_enable_override (void);
|
|||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <dlfcn.h>
|
||||
#include <pthread.h>
|
||||
#ifdef HAVE_EXECINFO_H
|
||||
|
@ -260,6 +261,20 @@ char *setlocale (int cat, const char *locale)
|
|||
}
|
||||
|
||||
|
||||
/* strerror() is not thread-safe in theory (POSIX), nor in practice (glibc).
|
||||
* This caused quite nasty crashes in the history of VLC/Linux. */
|
||||
char *strerror (int val)
|
||||
{
|
||||
if (override)
|
||||
{
|
||||
static const char msg[] =
|
||||
"Error message unavailable (use strerror_r instead of strerror)!";
|
||||
LOG("Blocked", "%d", val);
|
||||
return (char *)msg;
|
||||
}
|
||||
return CALL(strerror, val);
|
||||
}
|
||||
|
||||
/*** Xlib ****/
|
||||
#ifdef HAVE_X11_XLIB_H
|
||||
# include <X11/Xlib.h>
|
||||
|
|
Loading…
Reference in New Issue