@@ -13,7 +13,7 @@ import (
13
13
"github.com/stretchr/testify/assert"
14
14
)
15
15
16
- func testPullCreate (t * testing.T , session * TestSession , user , repo , branch string ) * TestResponse {
16
+ func testPullCreate (t * testing.T , session * TestSession , user , repo , branch , title string ) * TestResponse {
17
17
req := NewRequest (t , "GET" , path .Join (user , repo ))
18
18
resp := session .MakeRequest (t , req , http .StatusOK )
19
19
@@ -34,7 +34,7 @@ func testPullCreate(t *testing.T, session *TestSession, user, repo, branch strin
34
34
assert .True (t , exists , "The template has changed" )
35
35
req = NewRequestWithValues (t , "POST" , link , map [string ]string {
36
36
"_csrf" : htmlDoc .GetCSRF (),
37
- "title" : "This is a pull title" ,
37
+ "title" : title ,
38
38
})
39
39
resp = session .MakeRequest (t , req , http .StatusFound )
40
40
@@ -48,5 +48,40 @@ func TestPullCreate(t *testing.T) {
48
48
session := loginUser (t , "user1" )
49
49
testRepoFork (t , session , "user2" , "repo1" , "user1" , "repo1" )
50
50
testEditFile (t , session , "user1" , "repo1" , "master" , "README.md" , "Hello, World (Edited)\n " )
51
- testPullCreate (t , session , "user1" , "repo1" , "master" )
51
+ testPullCreate (t , session , "user1" , "repo1" , "master" , "This is a pull title" )
52
+ }
53
+
54
+ func TestPullCreate_TitleEscape (t * testing.T ) {
55
+ prepareTestEnv (t )
56
+ session := loginUser (t , "user1" )
57
+ testRepoFork (t , session , "user2" , "repo1" , "user1" , "repo1" )
58
+ testEditFile (t , session , "user1" , "repo1" , "master" , "README.md" , "Hello, World (Edited)\n " )
59
+ resp := testPullCreate (t , session , "user1" , "repo1" , "master" , "<i>XSS PR</i>" )
60
+
61
+ // check the redirected URL
62
+ url := RedirectURL (t , resp )
63
+ assert .Regexp (t , "^/user2/repo1/pulls/[0-9]*$" , url )
64
+
65
+ // Edit title
66
+ req := NewRequest (t , "GET" , url )
67
+ resp = session .MakeRequest (t , req , http .StatusOK )
68
+ htmlDoc := NewHTMLParser (t , resp .Body )
69
+ editTestTitleURL , exists := htmlDoc .doc .Find ("#save-edit-title" ).First ().Attr ("data-update-url" )
70
+ assert .True (t , exists , "The template has changed" )
71
+
72
+ req = NewRequestWithValues (t , "POST" , editTestTitleURL , map [string ]string {
73
+ "_csrf" : htmlDoc .GetCSRF (),
74
+ "title" : "<u>XSS PR</u>" ,
75
+ })
76
+ session .MakeRequest (t , req , http .StatusOK )
77
+
78
+ req = NewRequest (t , "GET" , url )
79
+ resp = session .MakeRequest (t , req , http .StatusOK )
80
+ htmlDoc = NewHTMLParser (t , resp .Body )
81
+ titleHTML , err := htmlDoc .doc .Find (".comments .event .text b" ).First ().Html ()
82
+ assert .NoError (t , err )
83
+ assert .Equal (t , "<i>XSS PR</i>" , titleHTML )
84
+ titleHTML , err = htmlDoc .doc .Find (".comments .event .text b" ).Next ().Html ()
85
+ assert .NoError (t , err )
86
+ assert .Equal (t , "<u>XSS PR</u>" , titleHTML )
52
87
}
0 commit comments