Skip to content

Commit abf0033

Browse files
authored
fix: handle invalid Referer header in article lookup middleware (#58793)
1 parent ac1d99c commit abf0033

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

src/article-api/middleware/article.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,11 +172,19 @@ function incrementArticleLookup(
172172

173173
// logs the source of the request, if it's for hovercards it'll have the header X-Request-Source.
174174
// see src/links/components/LinkPreviewPopover.tsx
175-
const source =
176-
req.get('X-Request-Source') ||
177-
(req.get('Referer')
178-
? `external-${new URL(req.get('Referer') || '').hostname || 'unknown'}`
179-
: 'external')
175+
let source = req.get('X-Request-Source')
176+
if (!source) {
177+
const referer = req.get('Referer')
178+
if (referer) {
179+
try {
180+
source = `external-${new URL(referer).hostname || 'unknown'}`
181+
} catch {
182+
source = 'external'
183+
}
184+
} else {
185+
source = 'external'
186+
}
187+
}
180188

181189
const tags = [
182190
// According to https://docs.datadoghq.com/getting_started/tagging/#define-tags

src/article-api/tests/article-body.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,13 @@ describe('article body api', () => {
6666
const { error } = JSON.parse(res.body)
6767
expect(error).toContain("isn't yet available in markdown")
6868
})
69+
70+
test('invalid Referer header does not crash', async () => {
71+
const res = await get(makeURL('/en/get-started/start-your-journey/hello-world'), {
72+
headers: {
73+
Referer: 'invalid-url',
74+
},
75+
})
76+
expect(res.statusCode).toBe(200)
77+
})
6978
})

0 commit comments

Comments
 (0)