QDir::homePath() should account for an empty $HOME (QTBUG-4862, kde#249217, #694385)

This commit is contained in:
Rex Dieter 2012-10-22 14:20:53 -05:00
parent 86416228bf
commit 0e56548e70
2 changed files with 44 additions and 2 deletions

View File

@ -0,0 +1,32 @@
diff -up qt-everywhere-opensource-src-4.8.3/src/corelib/io/qfilesystemengine_unix.cpp.QTBUG-4862 qt-everywhere-opensource-src-4.8.3/src/corelib/io/qfilesystemengine_unix.cpp
--- qt-everywhere-opensource-src-4.8.3/src/corelib/io/qfilesystemengine_unix.cpp.QTBUG-4862 2012-09-10 20:36:50.000000000 -0500
+++ qt-everywhere-opensource-src-4.8.3/src/corelib/io/qfilesystemengine_unix.cpp 2012-10-22 14:16:42.672111081 -0500
@@ -611,7 +611,26 @@ bool QFileSystemEngine::setPermissions(c
QString QFileSystemEngine::homePath()
{
QString home = QFile::decodeName(qgetenv("HOME"));
- if (home.isNull())
+ if (home.isEmpty())
+ {
+#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD)
+ int size_max = sysconf(_SC_GETPW_R_SIZE_MAX);
+ if (size_max == -1)
+ size_max = 1024;
+ QVarLengthArray<char, 1024> buf(size_max);
+#endif
+ struct passwd *pw = 0;
+ uid_t user_id = getuid();
+ pw = getpwuid(user_id);
+#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD)
+ struct passwd entry;
+ getpwuid_r(user_id, &entry, buf.data(), buf.size(), &pw);
+#else
+ pw = getpwuid(user_id);
+#endif
+ home = QFile::decodeName(QByteArray(pw->pw_dir));
+ }
+ if (home.isEmpty())
home = rootPath();
return QDir::cleanPath(home);
}
diff -up qt-everywhere-opensource-src-4.8.3/src/corelib/io/qfsfileengine_unix.cpp.QTBUG-4862 qt-everywhere-opensource-src-4.8.3/src/corelib/io/qfsfileengine_unix.cpp

14
qt.spec
View File

@ -16,7 +16,7 @@ Summary: Qt toolkit
Name: qt
Epoch: 1
Version: 4.8.3
Release: 4%{?dist}
Release: 5%{?dist}
# See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details
License: (LGPLv2 with exceptions or GPLv3 with exceptions) and ASL 2.0 and BSD and FTL and MIT
@ -108,7 +108,13 @@ Patch77: qt-everywhere-opensource-src-4.8.3-icu_no_debug.patch
Patch80: qt-everywhere-opensource-src-4.8.0-ld-gold.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=810500
Patch81: ./qt-everywhere-opensource-src-4.8.2--assistant-crash.patch
Patch81: qt-everywhere-opensource-src-4.8.2--assistant-crash.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=694385
# https://bugs.kde.org/show_bug.cgi?id=249217
# https://bugreports.qt-project.org/browse/QTBUG-4862
# QDir::homePath() should account for an empty HOME environment variable on X11
Patch82: qt-everywhere-opensource-src-4.8.3-QTBUG-4862.patch
# upstream patches
# http://codereview.qt-project.org/#change,22006
@ -456,6 +462,7 @@ rm -fv mkspecs/linux-g++*/qmake.conf.multilib-optflags
%patch77 -p1 -b .icu_no_debug
%patch80 -p1 -b .ld.gold
%patch81 -p1 -b .assistant-crash
%patch82 -p1 -b .QTBUG-4862
# upstream patches
%patch100 -p1 -b .QTgaHandler
@ -1098,6 +1105,9 @@ fi
%changelog
* Mon Oct 22 2012 Rex Dieter <rdieter@fedoraproject.org> 1:4.8.3-5
- QDir::homePath() should account for an empty $HOME (QTBUG-4862, kde#249217, #694385)
* Sat Oct 20 2012 Rex Dieter <rdieter@fedoraproject.org> 1:4.8.3-4
- $RPM_LD_FLAGS should be propagated to qmake's defaults (#868554)