diff options
author | Matthew Vogt <matthew.vogt@nokia.com> | 2012-01-16 11:05:23 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-18 01:37:30 +0100 |
commit | 3aa53b8bc383ebcdf8dc922b2670170ec012949f (patch) | |
tree | 26181d69c9cdb5a2bbd61a3c99b97523352cf08c /src/declarative/qml/v4 | |
parent | 52c1d7a994216f0b37ac04a2fea4337bc0c7550b (diff) |
Allow QML URLs to contain pre-encoded octets
Use QUrl Tolerant parsing mode to permit user-supplied URLs to contain
pre-encoded octets which are not mangled by string conversion.
Task-number: QTBUG-22756
Change-Id: I4b160b04340b95221d1eb3336bda8c0b38d2e232
Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Diffstat (limited to 'src/declarative/qml/v4')
-rw-r--r-- | src/declarative/qml/v4/qv4bindings.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/declarative/qml/v4/qv4bindings.cpp b/src/declarative/qml/v4/qv4bindings.cpp index 5255db0163..ba53a4176c 100644 --- a/src/declarative/qml/v4/qv4bindings.cpp +++ b/src/declarative/qml/v4/qv4bindings.cpp @@ -420,15 +420,16 @@ inline static QUrl toUrl(Register *reg, int type, QDeclarativeContextData *conte if (vt == QVariant::Url) { base = var->toUrl(); } else if (vt == QVariant::ByteArray) { - base = QUrl(QString::fromUtf8(var->toByteArray())); + // Preserve any valid percent-encoded octets supplied by the source + base.setEncodedUrl(var->toByteArray(), QUrl::TolerantMode); } else if (vt == QVariant::String) { - base = QUrl(var->toString()); + base.setEncodedUrl(var->toString().toUtf8(), QUrl::TolerantMode); } else { if (ok) *ok = false; return QUrl(); } } else if (type == QMetaType::QString) { - base = QUrl(*reg->getstringptr()); + base.setEncodedUrl(reg->getstringptr()->toUtf8(), QUrl::TolerantMode); } else { if (ok) *ok = false; return QUrl(); @@ -1012,7 +1013,10 @@ void QV4Bindings::run(int instrIndex, quint32 &executedBlocks, output.cleanupString(); MARK_CLEAN_REGISTER(instr->unaryop.output); } - new (output.geturlptr()) QUrl(tmp); + QUrl *urlPtr = output.geturlptr(); + new (urlPtr) QUrl(); + urlPtr->setEncodedUrl(tmp.toUtf8(), QUrl::TolerantMode); + URL_REGISTER(instr->unaryop.output); } } |