diff --git a/ietf/doc/models.py b/ietf/doc/models.py index b23cf20bd..47075ec3c 100644 --- a/ietf/doc/models.py +++ b/ietf/doc/models.py @@ -18,7 +18,7 @@ from ietf.name.models import ( DocTypeName, DocTagName, StreamName, IntendedStdL DocRelationshipName, DocReminderTypeName, BallotPositionName, ReviewRequestStateName ) from ietf.person.models import Email, Person from ietf.utils.admin import admin_link - +from ietf.utils.validators import validate_no_control_chars class StateType(models.Model): slug = models.CharField(primary_key=True, max_length=30) # draft, draft-iesg, charter, ... @@ -65,7 +65,7 @@ class DocumentInfo(models.Model): time = models.DateTimeField(default=datetime.datetime.now) # should probably have auto_now=True type = models.ForeignKey(DocTypeName, blank=True, null=True) # Draft, Agenda, Minutes, Charter, Discuss, Guideline, Email, Review, Issue, Wiki, External ... - title = models.CharField(max_length=255) + title = models.CharField(max_length=255, validators=[validate_no_control_chars, ]) states = models.ManyToManyField(State, blank=True) # plain state (Active/Expired/...), IESG state, stream state tags = models.ManyToManyField(DocTagName, blank=True) # Revised ID Needed, ExternalParty, AD Followup, ... diff --git a/ietf/utils/validators.py b/ietf/utils/validators.py index a9fd387af..5d0bfa730 100644 --- a/ietf/utils/validators.py +++ b/ietf/utils/validators.py @@ -5,10 +5,19 @@ from __future__ import unicode_literals import re from django.core.exceptions import ValidationError +from django.core.validators import RegexValidator from django.utils.deconstruct import deconstructible +# Note that this is an instantiation of the regex validator, _not_ the +# regex-string validator defined right below +validate_no_control_chars = RegexValidator( + regex="^[^\x00-\x1f]*$", + message="Please enter a string without control characters." ) + + @deconstructible class RegexStringValidator(object): + "Validates that a given regular expression can be compiled." def __init__(self): pass @@ -36,3 +45,4 @@ class RegexStringValidator(object): return not (self == other) validate_regular_expression_string = RegexStringValidator() +