Skip to content

Commit 07e0eb8

Browse files
committed
Properly URL-encode and -decode a bunch of query parameters.
- Legacy-Id: 19981
1 parent 686f835 commit 07e0eb8

6 files changed

Lines changed: 17 additions & 18 deletions

File tree

ietf/doc/tests_bofreq.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from pyquery import PyQuery
99
from random import randint
1010
from tempfile import NamedTemporaryFile
11-
from html import escape, unescape
11+
from html import unescape
1212

1313
from django.conf import settings
1414
from django.urls import reverse as urlreverse

ietf/meeting/tests_js.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import os
99
import re
1010
from unittest import skipIf
11+
import urllib.parse
1112

1213
import django
1314
from django.utils.text import slugify
@@ -1725,7 +1726,7 @@ def __call__(self, driver):
17251726
# Now select a different item from the select input
17261727
option.click()
17271728
try:
1728-
wait.until(in_iframe_href('tz=america/halifax', self.driver.find_element(By.CSS_SELECTOR, '#weekview iframe')))
1729+
wait.until(in_iframe_href(urllib.parse.quote('tz=america/halifax', safe='='), self.driver.find_element(By.CSS_SELECTOR, '#weekview iframe')))
17291730
except:
17301731
self.fail('iframe href not updated to contain selected time zone')
17311732

@@ -1844,7 +1845,7 @@ def test_timezone_selection(self):
18441845
self.login()
18451846
for zone_name in zones_to_test:
18461847
zone = pytz.timezone(zone_name)
1847-
self.driver.get(self.absreverse('ietf.meeting.views.week_view') + '?tz=' + zone_name)
1848+
self.driver.get(self.absreverse('ietf.meeting.views.week_view') + '?tz=' + urllib.parse.quote(zone_name, safe=''))
18481849
for item in self.get_expected_items():
18491850
if item.session.name:
18501851
expected_name = item.session.name
@@ -1947,7 +1948,7 @@ def _assert_not_wrapped(displayed, expected_time_string):
19471948
self.login()
19481949

19491950
# Test in meeting local time
1950-
self.driver.get(self.absreverse('ietf.meeting.views.week_view') + '?tz=%s' % local_tz.lower())
1951+
self.driver.get(self.absreverse('ietf.meeting.views.week_view') + '?tz=%s' % urllib.parse.quote(local_tz.lower(), safe=''))
19511952

19521953
time_string = '-'.join([daytime_timeslot.local_start_time().strftime('%H%M'),
19531954
daytime_timeslot.local_end_time().strftime('%H%M')])

ietf/meeting/tests_views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from lxml.etree import tostring
1616
from io import StringIO, BytesIO
1717
from bs4 import BeautifulSoup
18-
from urllib.parse import urlparse, urlsplit
18+
from urllib.parse import urlparse, urlsplit, quote
1919
from PIL import Image
2020
from pathlib import Path
2121

@@ -409,7 +409,7 @@ def test_agenda_week_view(self):
409409
self.assertTrue(all([x in unicontent(r) for x in ['redraw_weekview', 'draw_calendar', ]]))
410410

411411
# Specifying a time zone should not change the output (time zones are handled by the JS)
412-
url = urlreverse("ietf.meeting.views.week_view",kwargs=dict(num=meeting.number)) + "?show=farfut&tz=Asia/Bangkok"
412+
url = urlreverse("ietf.meeting.views.week_view",kwargs=dict(num=meeting.number)) + "?show=farfut&" + quote("tz=Asia/Bangkok", safe='=')
413413
r_with_tz = self.client.get(url)
414414
self.assertEqual(r_with_tz.status_code,200)
415415
self.assertEqual(r.content, r_with_tz.content)

ietf/static/js/agenda_filter.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,16 @@ window.agenda_filter_for_testing; // methods to be accessed for automated testin
3838
}
3939

4040
function parse_query_params(qs) {
41-
var params = {};
42-
qs = decodeURI(qs)
43-
.replace(/^\?/, '')
44-
.toLowerCase();
45-
if (qs) {
46-
var param_strs = qs.split('&');
47-
for (var ii = 0; ii < param_strs.length; ii++) {
48-
var toks = param_strs[ii].split('=', 2);
49-
params[toks[0]] = toks[1] || true;
41+
const urlSearchParams = new URLSearchParams(qs);
42+
const params = Object.fromEntries(urlSearchParams.entries());
43+
44+
// the old code returned true for empty params, so do that, too
45+
for (const property in params) {
46+
if (params[property] === "") {
47+
params[property] = true;
5048
}
5149
}
50+
5251
return params;
5352
}
5453

ietf/templates/meeting/agenda.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -369,9 +369,9 @@ <h2 class="mt-3">
369369
if (!weekview.hasClass('visually-hidden')) {
370370
var queryparams = window.location.search;
371371
if (queryparams) {
372-
queryparams += '&tz=' + encodeURI(ietf_timezone.get_current_tz().toLowerCase());
372+
queryparams += '&tz=' + encodeURIComponent(ietf_timezone.get_current_tz().toLowerCase());
373373
} else {
374-
queryparams = '?tz=' + encodeURI(ietf_timezone.get_current_tz().toLowerCase());
374+
queryparams = '?tz=' + encodeURIComponent(ietf_timezone.get_current_tz().toLowerCase());
375375
}
376376
var new_url = 'week-view.html' + queryparams;
377377
var wv_iframe = $(weekview).children('iframe');

ietf/utils/templatetags/textfilters.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from django import template
99
from django.conf import settings
1010
from django.template.defaultfilters import stringfilter
11-
from django.utils.html import escape
1211
from django.utils.safestring import mark_safe
1312

1413
import debug # pyflakes:ignore

0 commit comments

Comments
 (0)