summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Nagy <robert@openbsd.org>2011-04-05 21:58:11 +0200
committerRobert Nagy <robert@openbsd.org>2011-04-05 21:58:11 +0200
commit3c7ca79ca63bcee9c8943cd2dc30984c0820eb8a (patch)
tree9024a4a1b29b0e56c519ae9b58903b2d080ae336
parent9e1bffbc1abd41a11ee1ddbf449e3d631782450a (diff)
pass pOrigPath (strdup'd) to dirname(3) instead of pPath to avoid double free
from the dirname(3) manual: Both dirname() and basename() may modify the contents of path, so copies should be passed to these functions. Furthermore, dirname() and basename() may return pointers to statically allocated memory which may be overwritten by subsequent calls.
-rwxr-xr-xdesktop/unx/source/start.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/desktop/unx/source/start.c b/desktop/unx/source/start.c
index 19420a9adf..b0f5ab393a 100755
--- a/desktop/unx/source/start.c
+++ b/desktop/unx/source/start.c
@@ -216,12 +216,12 @@ get_app_path( const char *pAppExec )
char pRealPath[PATH_MAX];
rtl_uString *pResult;
- char *pPath = strdup( pAppExec );
- pPath = dirname( pPath );
+ char *pOrigPath = strdup( pAppExec );
+ char *pPath = dirname( pOrigPath );
realpath( pPath, pRealPath );
pResult = charp_to_ustr( pRealPath );
- free( pPath );
+ free( pOrigPath );
return pResult;
}