@@ -323,6 +323,61 @@ func TestIsValidRedirect(t *testing.T) {
323323 Redirect: "http://a.sub.anyport.bar:8081/redirect",
324324 ExpectedResult: true,
325325 },
326+ {
327+ Desc: "openRedirect1",
328+ Redirect: "/\\evil.com",
329+ ExpectedResult: false,
330+ },
331+ {
332+ Desc: "openRedirectSpace1",
333+ Redirect: "/ /evil.com",
334+ ExpectedResult: false,
335+ },
336+ {
337+ Desc: "openRedirectSpace2",
338+ Redirect: "/ \\evil.com",
339+ ExpectedResult: false,
340+ },
341+ {
342+ Desc: "openRedirectTab1",
343+ Redirect: "/\t/evil.com",
344+ ExpectedResult: false,
345+ },
346+ {
347+ Desc: "openRedirectTab2",
348+ Redirect: "/\t\\evil.com",
349+ ExpectedResult: false,
350+ },
351+ {
352+ Desc: "openRedirectVerticalTab1",
353+ Redirect: "/\v/evil.com",
354+ ExpectedResult: false,
355+ },
356+ {
357+ Desc: "openRedirectVerticalTab2",
358+ Redirect: "/\v\\evil.com",
359+ ExpectedResult: false,
360+ },
361+ {
362+ Desc: "openRedirectNewLine1",
363+ Redirect: "/\n/evil.com",
364+ ExpectedResult: false,
365+ },
366+ {
367+ Desc: "openRedirectNewLine2",
368+ Redirect: "/\n\\evil.com",
369+ ExpectedResult: false,
370+ },
371+ {
372+ Desc: "openRedirectCarriageReturn1",
373+ Redirect: "/\r/evil.com",
374+ ExpectedResult: false,
375+ },
376+ {
377+ Desc: "openRedirectCarriageReturn2",
378+ Redirect: "/\r\\evil.com",
379+ ExpectedResult: false,
380+ },
326381 }
327382
328383 for _, tc := range testCases {