summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/io/qfsfileengine.cpp6
-rw-r--r--tests/auto/qfileinfo/tst_qfileinfo.cpp4
2 files changed, 9 insertions, 1 deletions
diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp
index efc09a0..b8f6e2c 100644
--- a/src/corelib/io/qfsfileengine.cpp
+++ b/src/corelib/io/qfsfileengine.cpp
@@ -139,7 +139,11 @@ QString QFSFileEnginePrivate::canonicalized(const QString &path)
return path;
#if defined(Q_OS_UNIX) || defined(Q_OS_SYMBIAN)
- // FIXME let's see if this stuff works, then we might be able to remove some of the other code
+ // FIXME let's see if this stuff works, then we might be able to remove some of the other code.
+ // baaad Mac: 10.5 and 10.6 crash if trying to free a value returned by
+ // realpath() if the input path is just the root component.
+ if (path.size() == 1 && path.at(0) == QLatin1Char('/'))
+ return path;
char *ret = realpath(path.toLocal8Bit().constData(), (char*)0);
if (ret) {
QString canonicalPath = QDir::cleanPath(QString::fromLocal8Bit(ret));
diff --git a/tests/auto/qfileinfo/tst_qfileinfo.cpp b/tests/auto/qfileinfo/tst_qfileinfo.cpp
index 21edbcf..cd58fd6 100644
--- a/tests/auto/qfileinfo/tst_qfileinfo.cpp
+++ b/tests/auto/qfileinfo/tst_qfileinfo.cpp
@@ -513,6 +513,10 @@ void tst_QFileInfo::canonicalFilePath()
QFileInfo info("/tmp/../../../../../../../../../../../../../../../../../");
info.canonicalFilePath();
+ // This used to crash on Mac
+ QFileInfo dontCrash(QLatin1String("/"));
+ QCOMPARE(dontCrash.canonicalFilePath(), QLatin1String("/"));
+
#ifndef Q_OS_WIN
// test symlinks
QFile::remove("link.lnk");