Skip to content

Commit d300a82

Browse files
committed
Added validation of draft names extracted from XML submission files.
- Legacy-Id: 16239
1 parent 5e79629 commit d300a82

2 files changed

Lines changed: 10 additions & 2 deletions

File tree

ietf/submit/forms.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from ietf.message.models import Message
2525
from ietf.name.models import FormalLanguageName, GroupTypeName
2626
from ietf.submit.models import Submission, Preapproval
27-
from ietf.submit.utils import validate_submission_rev, validate_submission_document_date
27+
from ietf.submit.utils import validate_submission_name, validate_submission_rev, validate_submission_document_date
2828
from ietf.submit.parsers.pdf_parser import PDFParser
2929
from ietf.submit.parsers.plain_parser import PlainParser
3030
from ietf.submit.parsers.ps_parser import PSParser
@@ -173,6 +173,9 @@ def clean(self):
173173
draftname = self.xmlroot.attrib.get('docName')
174174
if draftname is None:
175175
raise forms.ValidationError("No docName attribute found in the xml root element")
176+
name_error = validate_submission_name(draftname)
177+
if name_error:
178+
raise forms.ValidationError(name_error)
176179
revmatch = re.search("-[0-9][0-9]$", draftname)
177180
if revmatch:
178181
self.revision = draftname[-2:]

ietf/submit/utils.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# Copyright The IETF Trust 2011-2019, All Rights Reserved
22
# -*- coding: utf-8 -*-
33

4-
import os
54
import datetime
5+
import os
6+
import re
67
import six # pyflakes:ignore
78
import xml2rfc
89

@@ -78,6 +79,10 @@ def has_been_replaced_by(name):
7879

7980
return None
8081

82+
def validate_submission_name(name):
83+
if not re.search(r'^draft-[a-z][-a-z0-9]{0,39}$', name):
84+
return "Expected name 'draft-...' using lowercase ascii letters, digits, and hyphen; found '%s'." % name
85+
8186
def validate_submission_rev(name, rev):
8287
if not rev:
8388
return 'Revision not found'

0 commit comments

Comments
 (0)