Skip to content

Commit 0ff31da

Browse files
committed
Merge branch '84-handle-dns-txt-records-contain-multiple-strings'
Closes: #84
2 parents 2a7cf37 + 08787c2 commit 0ff31da

File tree

3 files changed

+30
-6
lines changed

3 files changed

+30
-6
lines changed

CHANGELOG.rst

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@
22
Changelog
33
=========
44

5+
------
6+
0.12.4
7+
------
8+
9+
Notable fixes
10+
=============
11+
12+
- DNS
13+
14+
- handle TXT records that contain multiple string (#84)
15+
516
-------------------
617
0.12.3 - 2024-03-05
718
-------------------

cryptoparser/dnsrec/record.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -490,10 +490,13 @@ def _parse(cls, parsable):
490490
raise NotEnoughData(cls.HEADER_SIZE - len(parsable))
491491

492492
parser = ParserBinary(parsable)
493+
value = ''
493494

494-
parser.parse_string('value', 1, encoding='ascii')
495+
while parser.unparsed_length:
496+
parser.parse_string('value', 1, encoding='ascii')
497+
value += parser['value']
495498

496-
return cls(**parser), parser.parsed_length
499+
return cls(value), parser.parsed_length
497500

498501
def compose(self):
499502
composer = ComposerBinary()

test/dnsrec/test_record.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -520,12 +520,21 @@ def test_compose(self):
520520

521521
class TestDnsRecordTxt(unittest.TestCase):
522522
def setUp(self):
523-
self.record_bytes = bytes(
523+
self.record_bytes_single = bytes(
524524
b'\x05' + # length: 5
525525
b'value' +
526526
b''
527527
)
528-
self.record = DnsRecordTxt(value='value')
528+
self.record_single = DnsRecordTxt(value='value')
529+
530+
self.record_bytes_multiple = bytes(
531+
b'\x06' + # length: 6
532+
b'value1' +
533+
b'\x06' + # length: 6
534+
b'value2' +
535+
b''
536+
)
537+
self.record_multiple = DnsRecordTxt(value='value1value2')
529538

530539
def test_error_not_enough_data(self):
531540
with self.assertRaises(NotEnoughData) as context_manager:
@@ -537,7 +546,8 @@ def test_error_not_enough_data(self):
537546
)
538547

539548
def test_parse(self):
540-
self.assertEqual(DnsRecordTxt.parse_exact_size(self.record_bytes), self.record)
549+
self.assertEqual(DnsRecordTxt.parse_exact_size(self.record_bytes_single), self.record_single)
550+
self.assertEqual(DnsRecordTxt.parse_exact_size(self.record_bytes_multiple), self.record_multiple)
541551

542552
def test_compose(self):
543-
self.assertEqual(self.record.compose(), self.record_bytes)
553+
self.assertEqual(self.record_single.compose(), self.record_bytes_single)

0 commit comments

Comments
 (0)