From: RĂ©mi Denis-Courmont Date: Sun, 11 Apr 2010 15:37:46 +0000 (+0300) Subject: Detect dangerous use of environment variables at run-time X-Git-Tag: 1.1.0-pre1~38 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=4e1ff3a1aa04411220a586365e0eda596cd9e506;hp=d8c9ed53b5680a5b6eb405f60a4a9539d2cc3a63;p=vlc Detect dangerous use of environment variables at run-time --- diff --git a/bin/override.c b/bin/override.c index 048c8fe1ca..5098a7d598 100644 --- a/bin/override.c +++ b/bin/override.c @@ -77,4 +77,43 @@ static void *getsym (const char *name) ({ typeof (func) *sym = getsym ( # func); sym (__VA_ARGS__); }) +/*** Environment *** + * + * "Conforming multi-threaded applications shall not use the environ variable + * to access or modify any environment variable while any other thread is + * concurrently modifying any environment variable." -- POSIX. + * + * Some evil libraries modify the environment. We currently ignore the calls as + * they could crash the process. This may cause funny behaviour though. */ +int putenv (char *str) +{ + if (override) + { + LOG("Blocked", "\"%s\"", str); + return 0; + } + return CALL(putenv, str); +} + +int setenv (const char *name, const char *value, int overwrite) +{ + if (override) + { + LOG("Blocked", "\"%s\", \"%s\", %d", name, value, overwrite); + return 0; + } + return CALL(setenv, name, value, overwrite); +} + +int unsetenv (const char *name) +{ + if (override) + { + LOG("Blocked", "\"%s\"", name); + return 0; + } + return CALL(unsetenv, name); +} + + #endif /* __ELF__ */