summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJeremy Nicholl <jnicholl@rim.com>2012-12-10 14:56:17 -0500
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-01-14 18:24:31 +0100
commit67195dc394001ee1c9adc7db97fd6ff9d88e9b0c (patch)
tree12631af4ba6b44b0b1364adad634f09fb0f4ca16 /src
parent90cb4d8e2e15ec3ebcf008dbc2d1b0c3cb975791 (diff)
Fix malloc errors from legacy realpath on Mac OSX.
Avoid using realpath(X,0) on Mac OSX at all, since even on versions of OSX where realpath(X,0) is supported, we still get the legacy version due to our compiler flags. If we were to change the -mmacosx-version-min to 10.5 or higher then this patch would be safe but unnecessary. Task-number: QTBUG-28282 Change-Id: Iee21003f3e9616482483a05ceee706b476091914 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/io/qfilesystemengine_unix.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp
index 5870cdf7de..f8cb130997 100644
--- a/src/corelib/io/qfilesystemengine_unix.cpp
+++ b/src/corelib/io/qfilesystemengine_unix.cpp
@@ -174,9 +174,16 @@ QFileSystemEntry QFileSystemEngine::canonicalName(const QFileSystemEntry &entry,
#else
char *ret = 0;
# if defined(Q_OS_MAC) && !defined(Q_OS_IOS)
- // Mac OS X 10.5.x doesn't support the realpath(X,0) extension we use here.
+ // When using -mmacosx-version-min=10.4, we get the legacy realpath implementation,
+ // which does not work properly with the realpath(X,0) form. See QTBUG-28282.
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_6) {
- ret = realpath(entry.nativeFilePath().constData(), (char*)0);
+ ret = (char*)malloc(PATH_MAX + 1);
+ if (ret && realpath(entry.nativeFilePath().constData(), (char*)ret) == 0) {
+ const int savedErrno = errno; // errno is checked below, and free() might change it
+ free(ret);
+ errno = savedErrno;
+ ret = 0;
+ }
} else {
// on 10.5 we can use FSRef to resolve the file path.
QString path = QDir::cleanPath(entry.filePath());