summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAssam Boudjelthia <assam.boudjelthia@qt.io>2023-11-26 12:50:45 +0200
committerAssam Boudjelthia <assam.boudjelthia@qt.io>2023-11-30 17:26:26 +0200
commitb044323c1656aeeec508afab8457755cc1e8c587 (patch)
treebd56c7f4f45dad747eb4de847b5a7f413c2fa895
parentd2c29aee41d06d59024ef72eb50bb9f25909e922 (diff)
AndroidTestRunner: Fix treatement of quotes in test args
This has two parts, under testrunner, make sure to pass test args that has quotes as \\\" so that the Android app gets a \" after parsing the intent extras. The app args are then is passed to C++ where QProcess::splitCommand() is used to parse the args string into a list, and to preserve the quotes in this case, the former call expects triple quotes to to get the quote character preserved in the split list. Fixes: QTQAINFRA-5703 Change-Id: Iad81cadf24a6def21ef1536c882ecd510c4426cf Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
-rw-r--r--src/plugins/platforms/android/androidjnimain.cpp11
-rw-r--r--src/tools/androidtestrunner/main.cpp2
2 files changed, 9 insertions, 4 deletions
diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp
index 2c7ddb0810..fcb2cae8c9 100644
--- a/src/plugins/platforms/android/androidjnimain.cpp
+++ b/src/plugins/platforms/android/androidjnimain.cpp
@@ -36,6 +36,9 @@
#include <qpa/qwindowsysteminterface.h>
+
+using namespace Qt::StringLiterals;
+
QT_BEGIN_NAMESPACE
static JavaVM *m_javaVM = nullptr;
@@ -439,14 +442,16 @@ namespace QtAndroid
static jboolean startQtAndroidPlugin(JNIEnv *env, jobject /*object*/, jstring paramsString)
{
+ Q_UNUSED(env)
+
m_androidPlatformIntegration = nullptr;
m_androidAssetsFileEngineHandler = new AndroidAssetsFileEngineHandler();
m_androidContentFileEngineHandler = new AndroidContentFileEngineHandler();
m_mainLibraryHnd = nullptr;
- const char *nativeString = env->GetStringUTFChars(paramsString, 0);
- const QStringList argsList = QProcess::splitCommand(QString::fromUtf8(nativeString));
- env->ReleaseStringUTFChars(paramsString, nativeString);
+ // QProcess::splitCommand() treats triple quotes as the quote character itself.
+ QString params = QJniObject(paramsString).toString().replace("\""_L1, "\"\"\""_L1);
+ const QStringList argsList = QProcess::splitCommand(params);
for (const QString &arg : argsList)
m_applicationParams.append(arg.toUtf8());
diff --git a/src/tools/androidtestrunner/main.cpp b/src/tools/androidtestrunner/main.cpp
index defa7500ae..2ef1f22601 100644
--- a/src/tools/androidtestrunner/main.cpp
+++ b/src/tools/androidtestrunner/main.cpp
@@ -355,7 +355,7 @@ static bool parseTestArgs()
if (match.hasMatch()) {
logType = match.capturedTexts().at(1);
} else {
- unhandledArgs << QStringLiteral(" \\\"%1\\\"").arg(arg);
+ unhandledArgs << " %1"_L1.arg(arg).replace("\""_L1, "\\\""_L1);
}
}
}