Update QUrlPrivate::setScheme: EmptySchemeError never happens
As the comment says, an empty scheme is not permitted. However, if that error were to happen, QUrl falls back to parsing the URI as an "URI reference", starting with the path. E.g., ":/foo" is a path of ":/foo", which will in turn trigger the compound "colon before slash" error. Also, we don't percent-decode in the scheme. Change-Id: I438a61e17323c7722ddcc64792577a9ecb869c4b Reviewed-by: Shane Kearns <shane.kearns@accenture.com> Reviewed-by: David Faure <faure@kde.org>
This commit is contained in:
parent
59ad0019dc
commit
fe1541b268
@ -661,17 +661,17 @@ bool QUrlPrivate::setScheme(const QString &value, int len)
|
||||
{
|
||||
// schemes are strictly RFC-compliant:
|
||||
// scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
|
||||
// but we need to decode any percent-encoding sequences that fall on
|
||||
// those characters
|
||||
// we also lowercase the scheme
|
||||
|
||||
// schemes in URLs are not allowed to be empty, but they can be in
|
||||
// "Relative URIs" which QUrl also supports. QUrl::setScheme does
|
||||
// not call us with len == 0, so this can only be from parse()
|
||||
scheme.clear();
|
||||
sectionIsPresent |= Scheme;
|
||||
sectionHasError |= Scheme; // assume it has errors, we'll clear before returning true
|
||||
errorCode = SchemeEmptyError;
|
||||
if (len == 0)
|
||||
return false;
|
||||
|
||||
sectionIsPresent |= Scheme;
|
||||
|
||||
// validate it:
|
||||
errorCode = InvalidSchemeError;
|
||||
int needsLowercasing = -1;
|
||||
@ -3413,8 +3413,6 @@ static QString errorMessage(QUrlPrivate::ErrorCode errorCode, QChar c)
|
||||
QString msg = QStringLiteral("Invalid scheme (character '%1' not permitted)");
|
||||
return msg.arg(c);
|
||||
}
|
||||
case QUrlPrivate::SchemeEmptyError:
|
||||
return QStringLiteral("Empty scheme");
|
||||
|
||||
case QUrlPrivate::InvalidUserNameError:
|
||||
return QString(QStringLiteral("Invalid user name (character '%1' not permitted)"))
|
||||
|
@ -79,7 +79,6 @@ public:
|
||||
enum ErrorCode {
|
||||
// the high byte of the error code matches the Section
|
||||
InvalidSchemeError = Scheme << 8,
|
||||
SchemeEmptyError,
|
||||
|
||||
InvalidUserNameError = UserName << 8,
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user