Skip to content

Commit

Permalink
fix(Network): Do not attempt to normalize malformed URLs. (#875)
Browse files Browse the repository at this point in the history
This patch avoids throwing 'url malformed' error during generating
request hash for request interception.

Fixes #869.
  • Loading branch information
aslushnikov committed Sep 28, 2017
1 parent ec760ab commit cfece34
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 2 deletions.
11 changes: 9 additions & 2 deletions lib/NetworkManager.js
Expand Up @@ -394,9 +394,16 @@ helper.tracePublicAPI(Response);
* @return {string}
*/
function generateRequestHash(request) {
const hash = {
let normalizedURL = request.url;
try {
// Decoding is necessary to normalize URLs. @see crbug.com/759388
url: decodeURI(request.url),
// The method will throw if the URL is malformed. In this case,
// consider URL to be normalized as-is.
normalizedURL = decodeURI(request.url);
} catch (e) {
}
const hash = {
url: normalizedURL,
method: request.method,
postData: request.postData,
headers: {},
Expand Down
7 changes: 7 additions & 0 deletions test/test.js
Expand Up @@ -979,6 +979,13 @@ describe('Page', function() {
const response = await page.goto(PREFIX + '/some nonexisting page');
expect(response.status).toBe(404);
}));
it('should work with badly encoded URLs', SX(async function() {
await page.setRequestInterceptionEnabled(true);
server.setRoute('/malformed?rnd=%911', (req, res) => res.end());
page.on('request', request => request.continue());
const response = await page.goto(PREFIX + '/malformed?rnd=%911');
expect(response.status).toBe(200);
}));
it('should work with encoded URLs - 2', SX(async function() {
// The requestWillBeSent will report URL as-is, whereas interception will
// report encoded URL for stylesheet. @see crbug.com/759388
Expand Down

0 comments on commit cfece34

Please sign in to comment.