From 71cacf22b83722c9a8668b1518028fa0835fb286 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Fri, 12 Apr 2019 15:37:15 +0200 Subject: Fix string replacement with invalid captures If we have a theoretically valid capture reference that just didn't capture anything in this match, we don't want to treat it as literal. Only capture references that clearly are outside the range of things we can possibly capture with this expression should be treated as literal strings. Change-Id: Iab0bf329d11a6b9e172aa662f11751d86cfc26a6 Fixes: QTBUG-75121 Reviewed-by: Lars Knoll --- tests/auto/qml/qjsengine/tst_qjsengine.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'tests') diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp index 0b1f1e0bca..dbb758ae42 100644 --- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp +++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp @@ -4427,6 +4427,34 @@ void tst_QJSEngine::stringReplace() val = engine.evaluate("'x'.replace(/()()()()()()()()()(x)/, '$10')"); QVERIFY(val.isString()); QCOMPARE(val.toString(), QString("x")); + + val = engine.evaluate("'123'.replace(/\\.0*$|(\\.\\d*[1-9])(0+)$/, '$1')"); + QVERIFY(val.isString()); + QCOMPARE(val.toString(), QString("123")); + + val = engine.evaluate("'123.00'.replace(/\\.0*$|(\\.\\d*[1-9])(0+)$/, '$1')"); + QVERIFY(val.isString()); + QCOMPARE(val.toString(), QString("123")); + + val = engine.evaluate("'123.0'.replace(/\\.0*$|(\\.\\d*[1-9])(0+)$/, '$1')"); + QVERIFY(val.isString()); + QCOMPARE(val.toString(), QString("123")); + + val = engine.evaluate("'123.'.replace(/\\.0*$|(\\.\\d*[1-9])(0+)$/, '$1')"); + QVERIFY(val.isString()); + QCOMPARE(val.toString(), QString("123")); + + val = engine.evaluate("'123.50'.replace(/\\.0*$|(\\.\\d*[1-9])(0+)$/, '$1')"); + QVERIFY(val.isString()); + QCOMPARE(val.toString(), QString("123.5")); + + val = engine.evaluate("'123.05'.replace(/\\.0*$|(\\.\\d*[1-9])(0+)$/, '$1')"); + QVERIFY(val.isString()); + QCOMPARE(val.toString(), QString("123.05")); + + val = engine.evaluate("'0.050'.replace(/\\.0*$|(\\.\\d*[1-9])(0+)$/, '$1')"); + QVERIFY(val.isString()); + QCOMPARE(val.toString(), QString("0.05")); } void tst_QJSEngine::protoChanges_QTBUG68369() -- cgit v1.2.3