generic: fix possible PID clamping

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2021-01-04 01:48:39 +02:00
parent 0ea27e5d09
commit a0547d6810
6 changed files with 38 additions and 38 deletions

View file

@ -75,7 +75,7 @@ public Q_SLOTS: // METHODS
return callWithArgumentList(QDBus::Block, QLatin1String("exec_blind"), argumentList);
}
inline QDBusReply<int> kdeinit_exec(const QString &app, const QStringList &args, const QStringList &env, const QString &startup_id, QString &dbusServiceName, QString &error, int &pid)
inline QDBusReply<int> kdeinit_exec(const QString &app, const QStringList &args, const QStringList &env, const QString &startup_id, QString &dbusServiceName, QString &error, qint64 &pid)
{
QList<QVariant> argumentList;
argumentList << qVariantFromValue(app) << qVariantFromValue(args) << qVariantFromValue(env) << qVariantFromValue(startup_id);
@ -83,12 +83,12 @@ public Q_SLOTS: // METHODS
if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 4) {
dbusServiceName = qdbus_cast<QString>(reply.arguments().at(1));
error = qdbus_cast<QString>(reply.arguments().at(2));
pid = qdbus_cast<int>(reply.arguments().at(3));
pid = qdbus_cast<qint64>(reply.arguments().at(3));
}
return reply;
}
inline QDBusReply<int> kdeinit_exec_wait(const QString &app, const QStringList &args, const QStringList &env, const QString &startup_id, QString &dbusServiceName, QString &error, int &pid)
inline QDBusReply<int> kdeinit_exec_wait(const QString &app, const QStringList &args, const QStringList &env, const QString &startup_id, QString &dbusServiceName, QString &error, qint64 &pid)
{
QList<QVariant> argumentList;
argumentList << qVariantFromValue(app) << qVariantFromValue(args) << qVariantFromValue(env) << qVariantFromValue(startup_id);
@ -96,7 +96,7 @@ public Q_SLOTS: // METHODS
if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 4) {
dbusServiceName = qdbus_cast<QString>(reply.arguments().at(1));
error = qdbus_cast<QString>(reply.arguments().at(2));
pid = qdbus_cast<int>(reply.arguments().at(3));
pid = qdbus_cast<qint64>(reply.arguments().at(3));
}
return reply;
}
@ -107,14 +107,14 @@ public Q_SLOTS: // METHODS
return callWithArgumentList(QDBus::Block, QLatin1String("reparseConfiguration"), argumentList);
}
inline QDBusReply<int> requestHoldSlave(const QString &url, const QString &app_socket)
inline QDBusReply<qint64> requestHoldSlave(const QString &url, const QString &app_socket)
{
QList<QVariant> argumentList;
argumentList << qVariantFromValue(url) << qVariantFromValue(app_socket);
return callWithArgumentList(QDBus::Block, QLatin1String("requestHoldSlave"), argumentList);
}
inline QDBusReply<int> requestSlave(const QString &protocol, const QString &host, const QString &app_socket, QString &error)
inline QDBusReply<qint64> requestSlave(const QString &protocol, const QString &host, const QString &app_socket, QString &error)
{
QList<QVariant> argumentList;
argumentList << qVariantFromValue(protocol) << qVariantFromValue(host) << qVariantFromValue(app_socket);
@ -132,7 +132,7 @@ public Q_SLOTS: // METHODS
return callWithArgumentList(QDBus::Block, QLatin1String("setLaunchEnv"), argumentList);
}
inline QDBusReply<int> start_service_by_desktop_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, QString &dbusServiceName, QString &error, int &pid)
inline QDBusReply<int> start_service_by_desktop_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, QString &dbusServiceName, QString &error, qint64 &pid)
{
QList<QVariant> argumentList;
argumentList << qVariantFromValue(serviceName) << qVariantFromValue(urls) << qVariantFromValue(envs) << qVariantFromValue(startup_id) << qVariantFromValue(blind);
@ -140,12 +140,12 @@ public Q_SLOTS: // METHODS
if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 4) {
dbusServiceName = qdbus_cast<QString>(reply.arguments().at(1));
error = qdbus_cast<QString>(reply.arguments().at(2));
pid = qdbus_cast<int>(reply.arguments().at(3));
pid = qdbus_cast<qint64>(reply.arguments().at(3));
}
return reply;
}
inline QDBusReply<int> start_service_by_desktop_path(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, QString &dbusServiceName, QString &error, int &pid)
inline QDBusReply<int> start_service_by_desktop_path(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, QString &dbusServiceName, QString &error, qint64 &pid)
{
QList<QVariant> argumentList;
argumentList << qVariantFromValue(serviceName) << qVariantFromValue(urls) << qVariantFromValue(envs) << qVariantFromValue(startup_id) << qVariantFromValue(blind);
@ -153,12 +153,12 @@ public Q_SLOTS: // METHODS
if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 4) {
dbusServiceName = qdbus_cast<QString>(reply.arguments().at(1));
error = qdbus_cast<QString>(reply.arguments().at(2));
pid = qdbus_cast<int>(reply.arguments().at(3));
pid = qdbus_cast<qint64>(reply.arguments().at(3));
}
return reply;
}
inline QDBusReply<int> start_service_by_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, QString &dbusServiceName, QString &error, int &pid)
inline QDBusReply<int> start_service_by_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, QString &dbusServiceName, QString &error, qint64 &pid)
{
QList<QVariant> argumentList;
argumentList << qVariantFromValue(serviceName) << qVariantFromValue(urls) << qVariantFromValue(envs) << qVariantFromValue(startup_id) << qVariantFromValue(blind);
@ -166,7 +166,7 @@ public Q_SLOTS: // METHODS
if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 4) {
dbusServiceName = qdbus_cast<QString>(reply.arguments().at(1));
error = qdbus_cast<QString>(reply.arguments().at(2));
pid = qdbus_cast<int>(reply.arguments().at(3));
pid = qdbus_cast<qint64>(reply.arguments().at(3));
}
return reply;
}

View file

@ -1161,17 +1161,17 @@ bool KLauncher::checkForHeldSlave(const QString &url)
}
void
KLauncher::waitForSlave(int pid, QDBusMessage msg)
KLauncher::waitForSlave(pid_t pid, QDBusMessage msg)
{
foreach (IdleSlave *slave, mSlaveList)
{
if (slave->pid() == static_cast<pid_t>(pid))
if (slave->pid() == pid)
return; // Already here.
}
SlaveWaitRequest *waitRequest = new SlaveWaitRequest;
msg.setDelayedReply(true);
waitRequest->transaction = msg;
waitRequest->pid = static_cast<pid_t>(pid);
waitRequest->pid = pid;
mSlaveWaitRequest.append(waitRequest);
}

View file

@ -237,7 +237,7 @@ public: // remote methods, called by KLauncherAdaptor
* @since 4.7
*/
bool checkForHeldSlave(const QString &url);
void waitForSlave(int pid, QDBusMessage msg);
void waitForSlave(pid_t pid, QDBusMessage msg);
void terminate_kdeinit();
public Q_SLOTS:

View file

@ -60,21 +60,21 @@ void KLauncherAdaptor::exec_blind(const QString &name, const QStringList &arg_li
static_cast<KLauncher *>(parent())->exec_blind(name, arg_list, envs, startup_id);
}
int KLauncherAdaptor::kdeinit_exec(const QString &app, const QStringList &args, const QStringList &env, const QString& startup_id, const QDBusMessage &msg, QString &, QString &, int &)
int KLauncherAdaptor::kdeinit_exec(const QString &app, const QStringList &args, const QStringList &env, const QString& startup_id, const QDBusMessage &msg, QString &, QString &, qint64 &)
{
// handle method call org.kde.KLauncher.kdeinit_exec
static_cast<KLauncher *>(parent())->kdeinit_exec(app, args, QString(), env, startup_id, false, msg);
return 0; // delayed reply
}
int KLauncherAdaptor::kdeinit_exec_wait(const QString &app, const QStringList &args, const QStringList &env, const QString& startup_id, const QDBusMessage &msg, QString &, QString &, int &)
int KLauncherAdaptor::kdeinit_exec_wait(const QString &app, const QStringList &args, const QStringList &env, const QString& startup_id, const QDBusMessage &msg, QString &, QString &, qint64 &)
{
// handle method call org.kde.KLauncher.kdeinit_exec_wait
static_cast<KLauncher *>(parent())->kdeinit_exec(app, args, QString(), env, startup_id, true, msg);
return 0; // delayed reply
}
int KLauncherAdaptor::kdeinit_exec_with_workdir(const QString &app, const QStringList &args, const QString& workdir, const QStringList &env, const QString& startup_id, const QDBusMessage &msg, QString &, QString &, int &)
int KLauncherAdaptor::kdeinit_exec_with_workdir(const QString &app, const QStringList &args, const QString& workdir, const QStringList &env, const QString& startup_id, const QDBusMessage &msg, QString &, QString &, qint64 &)
{
// handle method call org.kde.KLauncher.kdeinit_exec_with_workdir
static_cast<KLauncher *>(parent())->kdeinit_exec(app, args, workdir, env, startup_id, false, msg);
@ -87,13 +87,13 @@ void KLauncherAdaptor::reparseConfiguration()
static_cast<KLauncher *>(parent())->reparseConfiguration();
}
int KLauncherAdaptor::requestHoldSlave(const QString &url, const QString &app_socket)
qint64 KLauncherAdaptor::requestHoldSlave(const QString &url, const QString &app_socket)
{
// handle method call org.kde.KLauncher.requestHoldSlave
return static_cast<KLauncher *>(parent())->requestHoldSlave(KUrl(url), app_socket);
}
int KLauncherAdaptor::requestSlave(const QString &protocol, const QString &host, const QString &app_socket, QString &error)
qint64 KLauncherAdaptor::requestSlave(const QString &protocol, const QString &host, const QString &app_socket, QString &error)
{
// handle method call org.kde.KLauncher.requestSlave
return static_cast<KLauncher *>(parent())->requestSlave(protocol, host, app_socket, error);
@ -110,7 +110,7 @@ void KLauncherAdaptor::setLaunchEnv(const QString &name, const QString &value)
static_cast<KLauncher *>(parent())->setLaunchEnv(name, value);
}
int KLauncherAdaptor::start_service_by_desktop_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg, QString &dbusServiceName, QString &error, int &pid)
int KLauncherAdaptor::start_service_by_desktop_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg, QString &dbusServiceName, QString &error, qint64 &pid)
{
// handle method call org.kde.KLauncher.start_service_by_desktop_name
KLauncher *p = static_cast<KLauncher *>(parent());
@ -121,7 +121,7 @@ int KLauncherAdaptor::start_service_by_desktop_name(const QString &serviceName,
return p->requestResult.result;
}
int KLauncherAdaptor::start_service_by_desktop_path(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg, QString &dbusServiceName, QString &error, int &pid)
int KLauncherAdaptor::start_service_by_desktop_path(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg, QString &dbusServiceName, QString &error, qint64 &pid)
{
// handle method call org.kde.KLauncher.start_service_by_desktop_path
KLauncher *p = static_cast<KLauncher *>(parent());
@ -132,7 +132,7 @@ int KLauncherAdaptor::start_service_by_desktop_path(const QString &serviceName,
return p->requestResult.result;
}
int KLauncherAdaptor::start_service_by_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg, QString &dbusServiceName, QString &error, int &pid)
int KLauncherAdaptor::start_service_by_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg, QString &dbusServiceName, QString &error, qint64 &pid)
{
// handle method call org.kde.KLauncher.start_service_by_name
KLauncher *p = static_cast<KLauncher *>(parent());
@ -143,7 +143,7 @@ int KLauncherAdaptor::start_service_by_name(const QString &serviceName, const QS
return p->requestResult.result;
}
void KLauncherAdaptor::waitForSlave(int pid, const QDBusMessage &msg)
void KLauncherAdaptor::waitForSlave(qint64 pid, const QDBusMessage &msg)
{
// handle method call org.kde.KLauncher.waitForSlave
static_cast<KLauncher *>(parent())->waitForSlave(pid, msg);

View file

@ -48,19 +48,19 @@ public Q_SLOTS: // METHODS
void autoStart(int phase = 1);
void exec_blind(const QString &name, const QStringList &arg_list);
void exec_blind(const QString &name, const QStringList &arg_list, const QStringList &envs, const QString &startup_id);
int kdeinit_exec(const QString &app, const QStringList &args, const QStringList &env, const QString& startup_id, const QDBusMessage &msg, QString &dbusServiceName, QString &error, int &pid);
int kdeinit_exec_wait(const QString &app, const QStringList &args, const QStringList &env, const QString& startup_id, const QDBusMessage &msg, QString &dbusServiceName, QString &error, int &pid);
int kdeinit_exec_with_workdir(const QString &app, const QStringList &args, const QString& workdir, const QStringList &env, const QString& startup_id, const QDBusMessage &msg, QString &dbusServiceName, QString &error, int &pid);
int kdeinit_exec(const QString &app, const QStringList &args, const QStringList &env, const QString& startup_id, const QDBusMessage &msg, QString &dbusServiceName, QString &error, qint64 &pid);
int kdeinit_exec_wait(const QString &app, const QStringList &args, const QStringList &env, const QString& startup_id, const QDBusMessage &msg, QString &dbusServiceName, QString &error, qint64 &pid);
int kdeinit_exec_with_workdir(const QString &app, const QStringList &args, const QString& workdir, const QStringList &env, const QString& startup_id, const QDBusMessage &msg, QString &dbusServiceName, QString &error, qint64 &pid);
void reparseConfiguration();
int requestHoldSlave(const QString &url, const QString &app_socket);
int requestSlave(const QString &protocol, const QString &host, const QString &app_socket, QString &error);
qint64 requestHoldSlave(const QString &url, const QString &app_socket);
qint64 requestSlave(const QString &protocol, const QString &host, const QString &app_socket, QString &error);
bool checkForHeldSlave (const QString &url);
void setLaunchEnv(const QString &name, const QString &value);
int start_service_by_desktop_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg, QString &dbusServiceName, QString &error, int &pid);
int start_service_by_desktop_path(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg, QString &dbusServiceName, QString &error, int &pid);
int start_service_by_desktop_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg, QString &dbusServiceName, QString &error, qint64 &pid);
int start_service_by_desktop_path(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg, QString &dbusServiceName, QString &error, qint64 &pid);
// Deprecated, to be removed in KDE5.
int start_service_by_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg, QString &dbusServiceName, QString &error, int &pid);
void waitForSlave(int pid, const QDBusMessage &msg);
int start_service_by_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg, QString &dbusServiceName, QString &error, qint64 &pid);
void waitForSlave(qint64 pid, const QDBusMessage &msg);
void terminate_kdeinit();
Q_SIGNALS: // SIGNALS
void autoStart0Done();

View file

@ -456,7 +456,7 @@ Slave* Slave::createSlave( const QString &protocol, const KUrl& url, int& error,
org::kde::KLauncher* klauncher = KToolInvocation::klauncher();
QString errorStr;
QDBusReply<int> reply = klauncher->requestSlave(protocol, url.host(), slaveAddress, errorStr);
QDBusReply<qint64> reply = klauncher->requestSlave(protocol, url.host(), slaveAddress, errorStr);
if (!reply.isValid()) {
error_text = i18n("Cannot talk to klauncher: %1", klauncher->lastError().message() );
error = KIO::ERR_CANNOT_LAUNCH_PROCESS;
@ -484,7 +484,7 @@ Slave* Slave::holdSlave( const QString &protocol, const KUrl& url )
return 0;
Slave *slave = new Slave(protocol);
QString slaveAddress = slave->d_func()->slaveconnserver->address();
QDBusReply<int> reply = KToolInvocation::klauncher()->requestHoldSlave(url.url(), slaveAddress);
QDBusReply<qint64> reply = KToolInvocation::klauncher()->requestHoldSlave(url.url(), slaveAddress);
if (!reply.isValid()) {
delete slave;
return 0;