aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/jsruntime/qv4runtime.cpp21
-rw-r--r--tests/auto/qml/ecmascripttests/TestExpectations3
2 files changed, 18 insertions, 6 deletions
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp
index 39a451e941..6ada8b64f1 100644
--- a/src/qml/jsruntime/qv4runtime.cpp
+++ b/src/qml/jsruntime/qv4runtime.cpp
@@ -377,9 +377,24 @@ QV4::ReturnedValue Runtime::method_in(ExecutionEngine *engine, const Value &left
double RuntimeHelpers::stringToNumber(const QString &string)
{
const QStringRef s = QStringRef(&string).trimmed();
- if (s.startsWith(QLatin1String("0x")) || s.startsWith(QLatin1String("0X")))
- return s.toLong(nullptr, 16);
- bool ok;
+ if (s.startsWith(QLatin1Char('0'))) {
+ int base = -1;
+ if (s.startsWith(QLatin1String("0x")) || s.startsWith(QLatin1String("0X")))
+ base = 16;
+ else if (s.startsWith(QLatin1String("0o")) || s.startsWith(QLatin1String("0O")))
+ base = 8;
+ else if (s.startsWith(QLatin1String("0b")) || s.startsWith(QLatin1String("0B")))
+ base = 2;
+ if (base > 0) {
+ bool ok = true;
+ qlonglong num;
+ num = s.mid(2).toLongLong(&ok, base);
+ if (!ok)
+ return qQNaN();
+ return num;
+ }
+ }
+ bool ok = false;
QByteArray ba = s.toLatin1();
const char *begin = ba.constData();
const char *end = nullptr;
diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations
index d1740e5147..b5d89ca545 100644
--- a/tests/auto/qml/ecmascripttests/TestExpectations
+++ b/tests/auto/qml/ecmascripttests/TestExpectations
@@ -197,9 +197,6 @@ built-ins/Map/prototype/forEach/iterates-values-deleted-then-readded.js fails
built-ins/Math/round/S15.8.2.15_A7.js fails
built-ins/Number/proto-from-ctor-realm.js fails
built-ins/Number/prototype/toPrecision/return-values.js fails
-built-ins/Number/string-binary-literal.js fails
-built-ins/Number/string-hex-literal-invalid.js fails
-built-ins/Number/string-octal-literal.js fails
built-ins/Object/create/15.2.3.5-4-14.js strictFails
built-ins/Object/create/15.2.3.5-4-37.js strictFails
built-ins/Object/entries/getter-making-future-key-nonenumerable.js fails