summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Herkt <lachs0r@srsfckn.biz>2012-04-28 17:37:01 +0200
committerUoti Urpala <uau@mplayer2.org>2012-04-28 21:47:53 +0300
commitf64a4e9931428de0f308f6ed0a0144edb8ce9619 (patch)
tree41b3e92d02621878d9665cd900e0ffd82331ce2c
parent66e0426907ae6c95959206d037cdd74c70198f1c (diff)
downloadmpv-f64a4e9931428de0f308f6ed0a0144edb8ce9619.tar.bz2
mpv-f64a4e9931428de0f308f6ed0a0144edb8ce9619.tar.xz
win32: get_path(): fix undefined behavior
MSWindows-specific code in get_path() declared a stack array (exedir[]) in an inner scope, then kept a reference to the array beyond the end of the that scope. Fix. This caused visible breakage with GCC 4.7.
-rw-r--r--path.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/path.c b/path.c
index 785c48eec9..e51c4c9c34 100644
--- a/path.c
+++ b/path.c
@@ -56,6 +56,9 @@ char *get_path(const char *filename){
#else
static char *config_dir = "/.mplayer";
#endif
+#if defined(__MINGW32__) || defined(__CYGWIN__)
+ char exedir[260];
+#endif
int len;
#ifdef CONFIG_MACOSX_BUNDLE
struct stat dummy;
@@ -73,9 +76,8 @@ char *get_path(const char *filename){
/* Hack to get fonts etc. loaded outside of Cygwin environment. */
{
int i,imax=0;
- char exedir[260];
- GetModuleFileNameA(NULL, exedir, 260);
- for (i=0; i< strlen(exedir); i++)
+ len = (int)GetModuleFileNameA(NULL, exedir, 260);
+ for (i=0; i < len; i++)
if (exedir[i] =='\\')
{exedir[i]='/'; imax=i;}
exedir[imax]='\0';