From d48f3fc1e74f4d489238f511df56a134b53e6a0b Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Tue, 17 Apr 2012 17:07:15 +0300 Subject: fix undefined behavior issue on Integrity in contrast to ::strdup(), qstrdup() allocates memory via new[]; deallocating this memory with free() leads to undefine behavior. Change-Id: I0692c4bef010c05de547283b00b6c6043ac24c79 Reviewed-by: Oswald Buddenhagen --- mkspecs/unsupported/integrity-ghs/qplatformdefs.h | 4 ++++ src/corelib/io/qprocess_unix.cpp | 7 ------- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/mkspecs/unsupported/integrity-ghs/qplatformdefs.h b/mkspecs/unsupported/integrity-ghs/qplatformdefs.h index 87459d874e..4df7dea1d7 100644 --- a/mkspecs/unsupported/integrity-ghs/qplatformdefs.h +++ b/mkspecs/unsupported/integrity-ghs/qplatformdefs.h @@ -170,6 +170,10 @@ #define QT_VSNPRINTF ::vsnprintf #endif +// INTEGRITY doesn't enable the declaration in _POSIX_SOURCE mode, +// because strdup() is not part of strict Posix; declare it here +extern "C" char *strdup(const char *src); + #ifndef MAXNAMLEN # define MAXNAMLEN NAME_MAX #endif diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp index fe13a9e06e..17dae7b6ca 100644 --- a/src/corelib/io/qprocess_unix.cpp +++ b/src/corelib/io/qprocess_unix.cpp @@ -117,13 +117,6 @@ QT_BEGIN_NAMESPACE // so we will use 512 static const int errorBufferMax = 512; -#ifdef Q_OS_INTEGRITY -static inline char *strdup(const char *data) -{ - return qstrdup(data); -} -#endif - static int qt_qprocess_deadChild_pipe[2]; static struct sigaction qt_sa_old_sigchld_handler; static void qt_sa_sigchld_handler(int signum) -- cgit v1.2.3