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