Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Copyright The IETF Trust 2025, All Rights Reserved

import django.core.validators
from django.db import migrations, models


class Migration(migrations.Migration):
dependencies = [
("doc", "0025_storedobject_storedobject_unique_name_per_store"),
]

operations = [
migrations.AlterField(
model_name="dochistory",
name="title",
field=models.CharField(
max_length=255,
validators=[
django.core.validators.ProhibitNullCharactersValidator,
django.core.validators.RegexValidator(
message="Please enter a string without control characters.",
regex="^[^\x01-\x1f]*$",
),
],
),
),
migrations.AlterField(
model_name="document",
name="title",
field=models.CharField(
max_length=255,
validators=[
django.core.validators.ProhibitNullCharactersValidator,
django.core.validators.RegexValidator(
message="Please enter a string without control characters.",
regex="^[^\x01-\x1f]*$",
),
],
),
),
]
14 changes: 12 additions & 2 deletions ietf/doc/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@
from django.core import checks
from django.core.files.base import File
from django.core.cache import caches
from django.core.validators import URLValidator, RegexValidator
from django.core.validators import (
URLValidator,
RegexValidator,
ProhibitNullCharactersValidator,
)
from django.urls import reverse as urlreverse
from django.contrib.contenttypes.models import ContentType
from django.conf import settings
Expand Down Expand Up @@ -107,7 +111,13 @@ class DocumentInfo(models.Model):
time = models.DateTimeField(default=timezone.now) # should probably have auto_now=True

type = ForeignKey(DocTypeName, blank=True, null=True) # Draft, Agenda, Minutes, Charter, Discuss, Guideline, Email, Review, Issue, Wiki, External ...
title = models.CharField(max_length=255, validators=[validate_no_control_chars, ])
title = models.CharField(
max_length=255,
validators=[
ProhibitNullCharactersValidator,
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, ...
Expand Down
5 changes: 3 additions & 2 deletions ietf/utils/validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@
# 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." )
regex="^[^\x01-\x1f]*$",
message="Please enter a string without control characters.",
)


@deconstructible
Expand Down