diff options
author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2023-11-26 12:50:45 +0200 |
---|---|---|
committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2023-11-30 17:26:26 +0200 |
commit | b044323c1656aeeec508afab8457755cc1e8c587 (patch) | |
tree | bd56c7f4f45dad747eb4de847b5a7f413c2fa895 | |
parent | d2c29aee41d06d59024ef72eb50bb9f25909e922 (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.cpp | 11 | ||||
-rw-r--r-- | src/tools/androidtestrunner/main.cpp | 2 |
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); } } } |