@@ -83,7 +83,7 @@ def repository_dir(self):
8383 def archive_dir (self ):
8484 return settings .INTERNET_DRAFT_ARCHIVE_DIR
8585
86- def submission_file (name , rev , group , format , templatename , author = None , email = None , title = None , year = None , ascii = True ):
86+ def submission_file (name_in_doc , name_in_post , group , templatename , author = None , email = None , title = None , year = None , ascii = True ):
8787 # construct appropriate text draft
8888 f = io .open (os .path .join (settings .BASE_DIR , "submit" , templatename ))
8989 template = f .read ()
@@ -104,7 +104,7 @@ def submission_file(name, rev, group, format, templatename, author=None, email=N
104104 year = year ,
105105 month = datetime .date .today ().strftime ("%B" ),
106106 day = datetime .date .today ().strftime ("%d" ),
107- name = "%s-%s" % ( name , rev ) ,
107+ name = name_in_doc ,
108108 group = group or "" ,
109109 author = author .ascii if ascii else author .name ,
110110 asciiAuthor = author .ascii ,
@@ -115,7 +115,7 @@ def submission_file(name, rev, group, format, templatename, author=None, email=N
115115 title = title ,
116116 )
117117 file = StringIO (submission_text )
118- file .name = "%s-%s.%s" % ( name , rev , format )
118+ file .name = name_in_post
119119 return file , author
120120
121121def create_draft_submission_with_rev_mismatch (rev = '01' ):
@@ -168,7 +168,7 @@ def create_and_post_submission(self, name, rev, author, group=None, formats=("tx
168168
169169 for format in formats :
170170 fn = '.' .join ((base_filename or 'test_submission' , format ))
171- files [format ], __ = submission_file (name , rev , group , format , fn , author = author )
171+ files [format ], __ = submission_file (f' { name } - { rev } ' , f' { name } - { rev } . { format } ' , group , fn , author = author )
172172
173173 r = self .client .post (url , files )
174174 if r .status_code != 302 :
@@ -1599,7 +1599,7 @@ def test_no_blackout_at_all(self):
15991599
16001600
16011601 def submit_bad_file (self , name , formats ):
1602- rev = ""
1602+ rev = "00 "
16031603 group = None
16041604
16051605 # break early in case of missing configuration
@@ -1614,7 +1614,7 @@ def submit_bad_file(self, name, formats):
16141614 # submit
16151615 files = {}
16161616 for format in formats :
1617- files [format ], author = submission_file (name , rev , group , "bad" , "test_submission.bad" )
1617+ files [format ], author = submission_file (f' { name } - { rev } ' , f' { name } - { rev } .bad' , group , "test_submission.bad" )
16181618
16191619 r = self .client .post (url , files )
16201620
@@ -1625,16 +1625,15 @@ def submit_bad_file(self, name, formats):
16251625
16261626 return r , q , m
16271627
1628- def submit_bad_doc_name_with_ext (self , name , formats ):
1628+ def submit_bad_doc_name_with_ext (self , name_in_doc , name_in_post , formats ):
16291629 group = None
16301630 url = urlreverse ('ietf.submit.views.upload_submission' )
16311631
16321632 # submit
16331633 files = {}
16341634 for format in formats :
1635- rev = '00.%s' % format
1636- files [format ], author = submission_file (name , rev , group , format , "test_submission.%s" % format )
1637- files [format ].name = "%s-%s.%s" % (name , 00 , format )
1635+ files [format ], author = submission_file (name_in_doc , name_in_post , group , "test_submission.%s" % format )
1636+ files [format ].name = name_in_post
16381637
16391638 r = self .client .post (url , files )
16401639
@@ -1652,10 +1651,15 @@ def test_submit_bad_file_txt(self):
16521651 self .assertIn ('Expected an TXT file of type "text/plain"' , m )
16531652 self .assertIn ('document does not contain a legitimate name' , m )
16541653
1655- def test_submit_bad_doc_name_txt (self ):
1656- r , q , m = self .submit_bad_doc_name_with_ext ("draft-foo.dot-bar" , ["txt" ])
1654+ def test_submit_bad_doc_name (self ):
1655+ r , q , m = self .submit_bad_doc_name_with_ext (name_in_doc = "draft-foo.dot-bar" , name_in_post = "draft-foo.dot-bar" , formats = ["txt" ])
16571656 self .assertIn ('contains a disallowed character with byte code: 46' , m )
1658- r , q , m = self .submit_bad_doc_name_with_ext ("draft-foo-bar" , ["xml" ])
1657+ # This actually is allowed by the existing code. A significant rework of the validation mechanics is needed.
1658+ # r, q, m = self.submit_bad_doc_name_with_ext(name_in_doc="draft-foo-bar-00.txt", name_in_post="draft-foo-bar-00.txt", formats=["txt"])
1659+ # self.assertIn('Did you include a filename extension in the name by mistake?', m)
1660+ r , q , m = self .submit_bad_doc_name_with_ext (name_in_doc = "draft-foo-bar-00.xml" , name_in_post = "draft-foo-bar-00.xml" , formats = ["xml" ])
1661+ self .assertIn ('Did you include a filename extension in the name by mistake?' , m )
1662+ r , q , m = self .submit_bad_doc_name_with_ext (name_in_doc = "../malicious-name-in-content-00" , name_in_post = "../malicious-name-in-post-00.xml" , formats = ["xml" ])
16591663 self .assertIn ('Did you include a filename extension in the name by mistake?' , m )
16601664
16611665 def test_submit_bad_file_xml (self ):
@@ -1692,7 +1696,7 @@ def test_submit_file_in_archive(self):
16921696 fn = os .path .join (dir , "%s-%s.%s" % (name , rev , format ))
16931697 with io .open (fn , 'w' ) as f :
16941698 f .write ("a" * 2000 )
1695- files [format ], author = submission_file (name , rev , group , format , "test_submission.%s" % format )
1699+ files [format ], author = submission_file (f' { name } - { rev } ' , f' { name } - { rev } . { format } ' , group , "test_submission.%s" % format )
16961700 r = self .client .post (url , files )
16971701
16981702 self .assertEqual (r .status_code , 200 )
@@ -1717,7 +1721,7 @@ def test_submit_nonascii_name(self):
17171721 user = UserFactory (first_name = "Jörgen" , last_name = "Nilsson" )
17181722 author = PersonFactory (user = user )
17191723
1720- file , __ = submission_file (name , rev , group , "txt" , "test_submission.nonascii" , author = author , ascii = False )
1724+ file , __ = submission_file (f' { name } - { rev } ' , f' { name } - { rev } .txt' , group , "test_submission.nonascii" , author = author , ascii = False )
17211725 files = {"txt" : file }
17221726
17231727 r = self .client .post (url , files )
@@ -1738,7 +1742,7 @@ def test_submit_missing_author_email(self):
17381742 for e in author .email_set .all ():
17391743 e .delete ()
17401744
1741- files = {"txt" : submission_file (name , rev , group , "txt" , "test_submission.txt" , author = author , ascii = True )[0 ] }
1745+ files = {"txt" : submission_file (f' { name } - { rev } ' , f' { name } - { rev } .txt' , group , "test_submission.txt" , author = author , ascii = True )[0 ] }
17421746
17431747 # submit
17441748 url = urlreverse ('ietf.submit.views.upload_submission' )
@@ -1762,7 +1766,7 @@ def test_submit_bad_author_email(self):
17621766 email .address = '@bad.email'
17631767 email .save ()
17641768
1765- files = {"xml" : submission_file (name , rev , group , "xml" , "test_submission.xml" , author = author , ascii = False )[0 ] }
1769+ files = {"xml" : submission_file (f' { name } - { rev } ' , f' { name } - { rev } .xml' , group , "test_submission.xml" , author = author , ascii = False )[0 ] }
17661770
17671771 # submit
17681772 url = urlreverse ('ietf.submit.views.upload_submission' )
@@ -1782,7 +1786,7 @@ def test_submit_invalid_yang(self):
17821786 group = None
17831787
17841788 # submit
1785- files = {"txt" : submission_file (name , rev , group , "txt" , "test_submission_invalid_yang.txt" )[0 ] }
1789+ files = {"txt" : submission_file (f' { name } - { rev } ' , f' { name } - { rev } .txt' , group , "test_submission_invalid_yang.txt" )[0 ] }
17861790
17871791 url = urlreverse ('ietf.submit.views.upload_submission' )
17881792 r = self .client .post (url , files )
@@ -2673,7 +2677,7 @@ def do_submission(self, name, rev, group=None, formats=["txt",]):
26732677 # submit
26742678 files = {}
26752679 for format in formats :
2676- files [format ], author = submission_file (name , rev , group , format , "test_submission.%s" % format )
2680+ files [format ], author = submission_file (f' { name } - { rev } ' , f' { name } - { rev } . { format } ' , group , "test_submission.%s" % format )
26772681
26782682 r = self .client .post (url , files )
26792683 if r .status_code != 302 :
@@ -2736,7 +2740,7 @@ def do_post_submission(self, rev, author=None, name=None, group=None, email=None
27362740 email = author .user .username
27372741 # submit
27382742 data = {}
2739- data ['xml' ], author = submission_file (name , rev , group , ' xml' , "test_submission.xml" , author = author , email = email , title = title , year = year )
2743+ data ['xml' ], author = submission_file (f' { name } - { rev } ' , f' { name } - { rev } . xml', group , "test_submission.xml" , author = author , email = email , title = title , year = year )
27402744 data ['user' ] = email
27412745 r = self .client .post (url , data )
27422746 return r , author , name
@@ -2857,7 +2861,7 @@ class RefsTests(BaseSubmitTestCase):
28572861 def test_draft_refs_identification (self ):
28582862
28592863 group = None
2860- file , __ = submission_file ('draft-some-subject' , '00 ' , group , 'txt' , "test_submission.txt" , )
2864+ file , __ = submission_file ('draft-some-subject-00 ' , 'draft-some-subject-00.txt ' , group , "test_submission.txt" , )
28612865 draft = PlaintextDraft (file .read (), file .name )
28622866 refs = draft .get_refs ()
28632867 self .assertEqual (refs ['rfc2119' ], 'norm' )
0 commit comments