Browse Source

Add ASCII validation to ChunkedValue, TXT/SPF

pull/1127/head
Ross McFarland 2 years ago
parent
commit
119de9b421
No known key found for this signature in database GPG Key ID: 943B179E15D3B22A
3 changed files with 35 additions and 0 deletions
  1. +1
    -0
      CHANGELOG.md
  2. +4
    -0
      octodns/record/chunked.py
  3. +30
    -0
      tests/test_octodns_record_chunked.py

+ 1
- 0
CHANGELOG.md View File

@ -7,6 +7,7 @@
a plan with a single change type with a single value, e.g. CNAME.
* Support added for config env variable expansion on nested levels, not just
top-level provider/processor keys
* _ChunkedValue ASCII validation added, SPF & TXT
## v1.4.0 - 2023-12-04 - Minor Meta


+ 4
- 0
octodns/record/chunked.py View File

@ -52,6 +52,10 @@ class _ChunkedValue(str):
for value in data:
if cls._unescaped_semicolon_re.search(value):
reasons.append(f'unescaped ; in "{value}"')
try:
value.encode('ascii')
except UnicodeEncodeError:
reasons.append(f'non ASCII character in "{value}"')
return reasons
@classmethod


+ 30
- 0
tests/test_octodns_record_chunked.py View File

@ -37,3 +37,33 @@ class TestRecordChunked(TestCase):
zone = Zone('unit.tests.', [])
a = SpfRecord(zone, 'a', {'ttl': 42, 'value': 'some.target.'})
self.assertEqual('some.target.', a.values[0].rdata_text)
class TestChunkedValue(TestCase):
def test_validate(self):
# valid stuff
for data in ('a', 'ab', 'abcdefg', 'abc def', 'abc\\; def'):
self.assertFalse(_ChunkedValue.validate(data, 'TXT'))
self.assertFalse(_ChunkedValue.validate([data], 'TXT'))
# missing
for data in (None, []):
self.assertEqual(
['missing value(s)'], _ChunkedValue.validate(data, 'TXT')
)
# unescaped ;
self.assertEqual(
['unescaped ; in "hello; world"'],
_ChunkedValue.validate('hello; world', 'TXT'),
)
# non-asci
self.assertEqual(
['non ASCII character in "v=spf1 –all"'],
_ChunkedValue.validate('v=spf1 –all', 'TXT'),
)
self.assertEqual(
['non ASCII character in "Déjà vu"'],
_ChunkedValue.validate('Déjà vu', 'TXT'),
)

Loading…
Cancel
Save