Skip to content

Commit f019bc0

Browse files
arnaud-morvanrldhont
authored andcommittedMay 2, 2018
[server] Avoid %2B to be interpreted as space in querystring
If '+' is replaced by ' ' after percent decoding, '%2B' is interpreted as ' '. Fix this by replacing '+' by '%20' before percent decoding.
1 parent 8553e80 commit f019bc0

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed
 

‎src/server/qgsserverrequest.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,12 @@ QMap<QString, QString> QgsServerRequest::parameters() const
7676
typedef QPair<QString, QString> pair_t;
7777

7878
QUrlQuery query( mUrl );
79+
query.setQuery( query.query().replace( '+', QStringLiteral( "%20" ) ) );
80+
7981
QList<pair_t> items = query.queryItems( QUrl::FullyDecoded );
8082
Q_FOREACH ( const pair_t &pair, items )
8183
{
82-
// prepare the value
83-
QString value = pair.second;
84-
value.replace( '+', ' ' );
85-
86-
mParams.insert( pair.first.toUpper(), value );
84+
mParams.insert( pair.first.toUpper(), pair.second );
8785
}
8886
mDecoded = true;
8987
}

‎tests/src/python/test_qgsserver_request.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ def test_requestParameters(self):
4848
for k, v in request.headers().items():
4949
self.assertEqual(parameters[k], v)
5050

51+
def test_requestParametersDecoding(self):
52+
"""Test request parameters decoding"""
53+
request = QgsServerRequest('http://somesite.com/somepath?parm1=val1%20%2B+val2', QgsServerRequest.GetMethod)
54+
self.assertEqual(request.parameters()['PARM1'], 'val1 + val2')
55+
5156
def test_requestUrl(self):
5257
"""Test url"""
5358
request = QgsServerRequest('http://somesite.com/somepath', QgsServerRequest.GetMethod)

0 commit comments

Comments
 (0)
Please sign in to comment.