From 5fda93adf3bfd35c78daba40cc4c13eb4c812697 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malthe=20J=C3=B8rgensen?= Date: Thu, 22 Oct 2020 23:26:47 +0200 Subject: [PATCH 1/2] Expand test to check query string decoding of "+" --- packages/navi/test/Integration.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/navi/test/Integration.test.ts b/packages/navi/test/Integration.test.ts index 42a6f6fc..eec60ac0 100644 --- a/packages/navi/test/Integration.test.ts +++ b/packages/navi/test/Integration.test.ts @@ -23,17 +23,17 @@ describe("integration", () => { expect(route.views[2]).toBe('basic-example') expect(route.title).toBe('Basic example') - nav.navigate('/examples/advanced?referrer=frontarm') + nav.navigate('/examples/advanced?referrer=frontend+armory') firstChunk = nav.getCurrentValue().chunks[0] route = nav.getCurrentValue() - expect(firstChunk.url.query).toEqual({ referrer: 'frontarm' }) + expect(firstChunk.url.query).toEqual({ referrer: 'frontend armory' }) expect(route.type).toEqual('busy') route = await nav.getRoute() - expect(route.url.query).toEqual({ referrer: 'frontarm' }) + expect(route.url.query).toEqual({ referrer: 'frontend armory' }) expect(route.title).toBe('Advanced example') expect(route.data['isPaywalled']).toBe(true) expect(route.views[route.views.length - 1]).toBe('please-login') From 435dbc64c0e85af73b570f1e3c1ec05b3422d906 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malthe=20J=C3=B8rgensen?= Date: Thu, 22 Oct 2020 23:31:09 +0200 Subject: [PATCH 2/2] parseQuery: Decode "+" in query string Previously, "+"-characters in the querystring would not be decoded to spaces, and instead be passed on as-is in `request.params`. See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL --- packages/navi/src/URLTools.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/navi/src/URLTools.ts b/packages/navi/src/URLTools.ts index 27c4f2bb..6f2676fc 100644 --- a/packages/navi/src/URLTools.ts +++ b/packages/navi/src/URLTools.ts @@ -98,7 +98,8 @@ export function parseQuery(queryString?: string, leadingCharacter='?'): Params { let queryParts = queryString.slice(1).split('&') for (let i = 0, len = queryParts.length; i < len; i++) { const x = queryParts[i].split('=') - query[x[0]] = x[1] ? decodeURIComponent(x[1]) : '' + const value = x[1] ? x[1].replace(/\+/g, '%20') : '' + query[x[0]] = decodeURIComponent(value) } return query }