Skip to content

Commit 755a362

Browse files
committed
added namespace check of options
1 parent 3fb3b9c commit 755a362

File tree

1 file changed

+101
-4
lines changed

1 file changed

+101
-4
lines changed

pcapkit/protocols/misc/pcapng.py

Lines changed: 101 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,7 @@ def nanosecond(self) -> 'bool':
661661
info = cast('Packet', self._info)
662662
options = self._ctx.interfaces[info.interface_id].options
663663
tsresol = cast('Optional[Data_IF_TSResolOption]',
664-
options.get(Enum_OptionType.if_tsresol)) # type: ignore[call-overload]
664+
options.get(Enum_OptionType.if_tsresol))
665665
if tsresol is None:
666666
return False
667667
return tsresol.resolution > 1_000_000
@@ -1373,6 +1373,9 @@ def _read_option_if_name(self, schema: 'Schema_IF_NameOption', *,
13731373
Constructed option data.
13741374
13751375
"""
1376+
if self._type != Enum_BlockType.Interface_Description_Block:
1377+
raise ProtocolError(f'PCAP-NG: [if_name] option must be in Interface Description Block, '
1378+
f'but found in {self._type} block.')
13761379
if self._opt[schema.type] > 0:
13771380
raise ProtocolError(f'PCAP-NG: [if_name] option must be only one, '
13781381
f'but {self._opt[schema.type] + 1} found.')
@@ -1396,6 +1399,9 @@ def _read_option_if_description(self, schema: 'Schema_IF_DescriptionOption', *,
13961399
Constructed option data.
13971400
13981401
"""
1402+
if self._type != Enum_BlockType.Interface_Description_Block:
1403+
raise ProtocolError(f'PCAP-NG: [if_description] option must be in Interface Description Block, '
1404+
f'but found in {self._type} block.')
13991405
if self._opt[schema.type] > 0:
14001406
raise ProtocolError(f'PCAP-NG: [if_description] option must be only one, '
14011407
f'but {self._opt[schema.type] + 1} found.')
@@ -1419,6 +1425,10 @@ def _read_option_if_ipv4(self, schema: 'Schema_IF_IPv4AddrOption', *,
14191425
Constructed option data.
14201426
14211427
"""
1428+
if self._type != Enum_BlockType.Interface_Description_Block:
1429+
raise ProtocolError(f'PCAP-NG: [if_IPv4addr] option must be in Interface Description Block, '
1430+
f'but found in {self._type} block.')
1431+
14221432
option = Data_IF_IPv4AddrOption(
14231433
type=schema.type,
14241434
length=schema.length,
@@ -1438,6 +1448,10 @@ def _read_option_if_ipv6(self, schema: 'Schema_IF_IPv6AddrOption', *,
14381448
Constructed option data.
14391449
14401450
"""
1451+
if self._type != Enum_BlockType.Interface_Description_Block:
1452+
raise ProtocolError(f'PCAP-NG: [if_IPv6addr] option must be in Interface Description Block, '
1453+
f'but found in {self._type} block.')
1454+
14411455
option = Data_IF_IPv6AddrOption(
14421456
type=schema.type,
14431457
length=schema.length,
@@ -1457,6 +1471,9 @@ def _read_option_if_mac(self, schema: 'Schema_IF_MACAddrOption', *,
14571471
Constructed option data.
14581472
14591473
"""
1474+
if self._type != Enum_BlockType.Interface_Description_Block:
1475+
raise ProtocolError(f'PCAP-NG: [if_MACaddr] option must be in Interface Description Block, '
1476+
f'but found in {self._type} block.')
14601477
if self._opt[schema.type] > 0:
14611478
raise ProtocolError(f'PCAP-NG: [if_MACaddr] option must be only one, '
14621479
f'but {self._opt[schema.type] + 1} found.')
@@ -1480,6 +1497,9 @@ def _read_option_if_eui(self, schema: 'Schema_IF_EUIAddrOption', *,
14801497
Constructed option data.
14811498
14821499
"""
1500+
if self._type != Enum_BlockType.Interface_Description_Block:
1501+
raise ProtocolError(f'PCAP-NG: [if_EUIaddr] option must be in Interface Description Block, '
1502+
f'but found in {self._type} block.')
14831503
if self._opt[schema.type] > 0:
14841504
raise ProtocolError(f'PCAP-NG: [if_EUIaddr] option must be only one, '
14851505
f'but {self._opt[schema.type] + 1} found.')
@@ -1503,6 +1523,9 @@ def _read_option_if_speed(self, schema: 'Schema_IF_SpeedOption', *,
15031523
Constructed option data.
15041524
15051525
"""
1526+
if self._type != Enum_BlockType.Interface_Description_Block:
1527+
raise ProtocolError(f'PCAP-NG: [if_speed] option must be in Interface Description Block, '
1528+
f'but found in {self._type} block.')
15061529
if self._opt[schema.type] > 0:
15071530
raise ProtocolError(f'PCAP-NG: [if_speed] option must be only one, '
15081531
f'but {self._opt[schema.type] + 1} found.')
@@ -1526,6 +1549,9 @@ def _read_option_if_tsresol(self, schema: 'Schema_IF_TSResolOption', *,
15261549
Constructed option data.
15271550
15281551
"""
1552+
if self._type != Enum_BlockType.Interface_Description_Block:
1553+
raise ProtocolError(f'PCAP-NG: [if_tsresol] option must be in Interface Description Block, '
1554+
f'but found in {self._type} block.')
15291555
if self._opt[schema.type] > 0:
15301556
raise ProtocolError(f'PCAP-NG: [if_tsresol] option must be only one, '
15311557
f'but {self._opt[schema.type] + 1} found.')
@@ -1549,6 +1575,9 @@ def _read_option_if_tzone(self, schema: 'Schema_IF_TZoneOption', *,
15491575
Constructed option data.
15501576
15511577
"""
1578+
if self._type != Enum_BlockType.Interface_Description_Block:
1579+
raise ProtocolError(f'PCAP-NG: [if_tzone] option must be in Interface Description Block, '
1580+
f'but found in {self._type} block.')
15521581
if self._opt[schema.type] > 0:
15531582
raise ProtocolError(f'PCAP-NG: [if_tzone] option must be only one, '
15541583
f'but {self._opt[schema.type] + 1} found.')
@@ -1572,6 +1601,9 @@ def _read_option_if_filter(self, schema: 'Schema_IF_FilterOption', *,
15721601
Constructed option data.
15731602
15741603
"""
1604+
if self._type != Enum_BlockType.Interface_Description_Block:
1605+
raise ProtocolError(f'PCAP-NG: [if_filter] option must be in Interface Description Block, '
1606+
f'but found in {self._type} block.')
15751607
if self._opt[schema.type] > 0:
15761608
raise ProtocolError(f'PCAP-NG: [if_filter] option must be only one, '
15771609
f'but {self._opt[schema.type] + 1} found.')
@@ -1596,6 +1628,9 @@ def _read_option_if_os(self, schema: 'Schema_IF_OSOption', *,
15961628
Constructed option data.
15971629
15981630
"""
1631+
if self._type != Enum_BlockType.Interface_Description_Block:
1632+
raise ProtocolError(f'PCAP-NG: [if_os] option must be in Interface Description Block, '
1633+
f'but found in {self._type} block.')
15991634
if self._opt[schema.type] > 0:
16001635
raise ProtocolError(f'PCAP-NG: [if_os] option must be only one, '
16011636
f'but {self._opt[schema.type] + 1} found.')
@@ -1619,6 +1654,9 @@ def _read_option_if_fcslen(self, schema: 'Schema_IF_FCSLenOption', *,
16191654
Constructed option data.
16201655
16211656
"""
1657+
if self._type != Enum_BlockType.Interface_Description_Block:
1658+
raise ProtocolError(f'PCAP-NG: [if_fcslen] option must be in Interface Description Block, '
1659+
f'but found in {self._type} block.')
16221660
if self._opt[schema.type] > 0:
16231661
raise ProtocolError(f'PCAP-NG: [if_fcslen] option must be only one, '
16241662
f'but {self._opt[schema.type] + 1} found.')
@@ -1642,6 +1680,9 @@ def _read_option_if_tsoffset(self, schema: 'Schema_IF_TSOffsetOption', *,
16421680
Constructed option data.
16431681
16441682
"""
1683+
if self._type != Enum_BlockType.Interface_Description_Block:
1684+
raise ProtocolError(f'PCAP-NG: [if_tsoffset] option must be in Interface Description Block, '
1685+
f'but found in {self._type} block.')
16451686
if self._opt[schema.type] > 0:
16461687
raise ProtocolError(f'PCAP-NG: [if_tsoffset] option must be only one, '
16471688
f'but {self._opt[schema.type] + 1} found.')
@@ -1665,6 +1706,9 @@ def _read_option_if_hardware(self, schema: 'Schema_IF_HardwareOption', *,
16651706
Constructed option data.
16661707
16671708
"""
1709+
if self._type != Enum_BlockType.Interface_Description_Block:
1710+
raise ProtocolError(f'PCAP-NG: [if_hardware] option must be in Interface Description Block, '
1711+
f'but found in {self._type} block.')
16681712
if self._opt[schema.type] > 0:
16691713
raise ProtocolError(f'PCAP-NG: [if_hardware] option must be only one, '
16701714
f'but {self._opt[schema.type] + 1} found.')
@@ -1688,6 +1732,9 @@ def _read_option_if_txspeed(self, schema: 'Schema_IF_TxSpeedOption', *,
16881732
Constructed option data.
16891733
16901734
"""
1735+
if self._type != Enum_BlockType.Interface_Description_Block:
1736+
raise ProtocolError(f'PCAP-NG: [if_txspeed] option must be in Interface Description Block, '
1737+
f'but found in {self._type} block.')
16911738
if self._opt[schema.type] > 0:
16921739
raise ProtocolError(f'PCAP-NG: [if_txspeed] option must be only one, '
16931740
f'but {self._opt[schema.type] + 1} found.')
@@ -1711,6 +1758,9 @@ def _read_option_if_rxspeed(self, schema: 'Schema_IF_RxSpeedOption', *,
17111758
Constructed option data.
17121759
17131760
"""
1761+
if self._type != Enum_BlockType.Interface_Description_Block:
1762+
raise ProtocolError(f'PCAP-NG: [if_rxspeed] option must be in Interface Description Block, '
1763+
f'but found in {self._type} block.')
17141764
if self._opt[schema.type] > 0:
17151765
raise ProtocolError(f'PCAP-NG: [if_rxspeed] option must be only one, '
17161766
f'but {self._opt[schema.type] + 1} found.')
@@ -1850,7 +1900,7 @@ def _make_pcapng_options(self, options: 'Option | list[Schema_Option | tuple[Enu
18501900
self._opt[code] += 1
18511901

18521902
if has_endofopt:
1853-
opt_endofopt = self._make_option_endofopt(Enum_OptionType.opt_endofopt) # type: ignore[arg-type]
1903+
opt_endofopt = self._make_option_endofopt(Enum_OptionType.opt_endofopt)
18541904
total_length += len(opt_endofopt.pack())
18551905
options_list.append(opt_endofopt)
18561906
return options_list, total_length
@@ -1877,7 +1927,7 @@ def _make_pcapng_options(self, options: 'Option | list[Schema_Option | tuple[Enu
18771927
self._opt[code] += 1
18781928

18791929
if has_endofopt:
1880-
opt_endofopt = self._make_option_endofopt(Enum_OptionType.opt_endofopt) # type: ignore[arg-type]
1930+
opt_endofopt = self._make_option_endofopt(Enum_OptionType.opt_endofopt)
18811931
total_length += len(opt_endofopt.pack())
18821932
options_list.append(opt_endofopt)
18831933
return options_list, total_length
@@ -1997,6 +2047,9 @@ def _make_option_if_name(self, type: 'Enum_OptionType', option: 'Optional[Data_I
19972047
Constructed option schema.
19982048
19992049
"""
2050+
if self._type != Enum_BlockType.Interface_Description_Block:
2051+
raise ProtocolError(f'PCAP-NG: [if_name] option must be in Interface Description Block, '
2052+
f'but found in {self._type} block.')
20002053
if self._opt[type] > 0:
20012054
raise ProtocolError(f'PCAP-NG: [if_name] option must be only one, '
20022055
f'but {self._opt[type] + 1} found.')
@@ -2025,6 +2078,9 @@ def _make_option_if_description(self, type: 'Enum_OptionType', option: 'Optional
20252078
Constructed option schema.
20262079
20272080
"""
2081+
if self._type != Enum_BlockType.Interface_Description_Block:
2082+
raise ProtocolError(f'PCAP-NG: [if_description] option must be in Interface Description Block, '
2083+
f'but found in {self._type} block.')
20282084
if self._opt[type] > 0:
20292085
raise ProtocolError(f'PCAP-NG: [if_description] option must be only one, '
20302086
f'but {self._opt[type] + 1} found.')
@@ -2053,6 +2109,10 @@ def _make_option_if_ipv4(self, type: 'Enum_OptionType', option: 'Optional[Data_I
20532109
Constructed option schema.
20542110
20552111
"""
2112+
if self._type != Enum_BlockType.Interface_Description_Block:
2113+
raise ProtocolError(f'PCAP-NG: [if_IPv4addr] option must be in Interface Description Block, '
2114+
f'but found in {self._type} block.')
2115+
20562116
if option is not None:
20572117
interface = option.interface
20582118

@@ -2077,6 +2137,10 @@ def _make_option_if_ipv6(self, type: 'Enum_OptionType', option: 'Optional[Data_I
20772137
Constructed option schema.
20782138
20792139
"""
2140+
if self._type != Enum_BlockType.Interface_Description_Block:
2141+
raise ProtocolError(f'PCAP-NG: [if_IPv6addr] option must be in Interface Description Block, '
2142+
f'but found in {self._type} block.')
2143+
20802144
if option is not None:
20812145
interface = option.interface
20822146

@@ -2101,6 +2165,9 @@ def _make_option_if_mac(self, type: 'Enum_OptionType', option: 'Optional[Data_IF
21012165
Constructed option schema.
21022166
21032167
"""
2168+
if self._type != Enum_BlockType.Interface_Description_Block:
2169+
raise ProtocolError(f'PCAP-NG: [if_MACaddr] option must be in Interface Description Block, '
2170+
f'but found in {self._type} block.')
21042171
if self._opt[type] > 0:
21052172
raise ProtocolError(f'PCAP-NG: [if_MACaddr] option must be only one, '
21062173
f'but {self._opt[type] + 1} found.')
@@ -2129,6 +2196,9 @@ def _make_option_if_eui(self, type: 'Enum_OptionType', option: 'Optional[Data_IF
21292196
Constructed option schema.
21302197
21312198
"""
2199+
if self._type != Enum_BlockType.Interface_Description_Block:
2200+
raise ProtocolError(f'PCAP-NG: [if_EUIaddr] option must be in Interface Description Block, '
2201+
f'but found in {self._type} block.')
21322202
if self._opt[type] > 0:
21332203
raise ProtocolError(f'PCAP-NG: [if_EUIaddr] option must be only one, '
21342204
f'but {self._opt[type] + 1} found.')
@@ -2157,6 +2227,9 @@ def _make_option_if_speed(self, type: 'Enum_OptionType', option: 'Optional[Data_
21572227
Constructed option schema.
21582228
21592229
"""
2230+
if self._type != Enum_BlockType.Interface_Description_Block:
2231+
raise ProtocolError(f'PCAP-NG: [if_speed] option must be in Interface Description Block, '
2232+
f'but found in {self._type} block.')
21602233
if self._opt[type] > 0:
21612234
raise ProtocolError(f'PCAP-NG: [if_speed] option must be only one, '
21622235
f'but {self._opt[type] + 1} found.')
@@ -2185,6 +2258,9 @@ def _make_option_if_tsresol(self, type: 'Enum_OptionType', option: 'Optional[Dat
21852258
Constructed option schema.
21862259
21872260
"""
2261+
if self._type != Enum_BlockType.Interface_Description_Block:
2262+
raise ProtocolError(f'PCAP-NG: [if_tsresol] option must be in Interface Description Block, '
2263+
f'but found in {self._type} block.')
21882264
if self._opt[type] > 0:
21892265
raise ProtocolError(f'PCAP-NG: [if_tsresol] option must be only one, '
21902266
f'but {self._opt[type] + 1} found.')
@@ -2217,7 +2293,7 @@ def _make_option_if_tsresol(self, type: 'Enum_OptionType', option: 'Optional[Dat
22172293
def _make_option_if_tzone(self, type: 'Enum_OptionType', option: 'Optional[Data_IF_TZoneOption]' = None, *,
22182294
tzone: 'timezone | timedelta | int' = 0,
22192295
**kwargs: 'Any') -> 'Schema_IF_TZoneOption':
2220-
"""Make PCAP-NG ``if_tsresol`` option.
2296+
"""Make PCAP-NG ``if_tzone`` option.
22212297
22222298
Args:
22232299
type: Option type.
@@ -2229,6 +2305,9 @@ def _make_option_if_tzone(self, type: 'Enum_OptionType', option: 'Optional[Data_
22292305
Constructed option schema.
22302306
22312307
"""
2308+
if self._type != Enum_BlockType.Interface_Description_Block:
2309+
raise ProtocolError(f'PCAP-NG: [if_tzone] option must be in Interface Description Block, '
2310+
f'but found in {self._type} block.')
22322311
if self._opt[type] > 0:
22332312
raise ProtocolError(f'PCAP-NG: [if_tzone] option must be only one, '
22342313
f'but {self._opt[type] + 1} found.')
@@ -2271,6 +2350,9 @@ def _make_option_if_filter(self, type: 'Enum_OptionType', option: 'Optional[Data
22712350
Constructed option schema.
22722351
22732352
"""
2353+
if self._type != Enum_BlockType.Interface_Description_Block:
2354+
raise ProtocolError(f'PCAP-NG: [if_filter] option must be in Interface Description Block, '
2355+
f'but found in {self._type} block.')
22742356
if self._opt[type] > 0:
22752357
raise ProtocolError(f'PCAP-NG: [if_filter] option must be only one, '
22762358
f'but {self._opt[type] + 1} found.')
@@ -2305,6 +2387,9 @@ def _make_option_if_os(self, type: 'Enum_OptionType', option: 'Optional[Data_IF_
23052387
Constructed option schema.
23062388
23072389
"""
2390+
if self._type != Enum_BlockType.Interface_Description_Block:
2391+
raise ProtocolError(f'PCAP-NG: [if_os] option must be in Interface Description Block, '
2392+
f'but found in {self._type} block.')
23082393
if self._opt[type] > 0:
23092394
raise ProtocolError(f'PCAP-NG: [if_os] option must be only one, '
23102395
f'but {self._opt[type] + 1} found.')
@@ -2333,6 +2418,9 @@ def _make_option_if_fcslen(self, type: 'Enum_OptionType', option: 'Optional[Data
23332418
Constructed option schema.
23342419
23352420
"""
2421+
if self._type != Enum_BlockType.Interface_Description_Block:
2422+
raise ProtocolError(f'PCAP-NG: [if_fcslen] option must be in Interface Description Block, '
2423+
f'but found in {self._type} block.')
23362424
if self._opt[type] > 0:
23372425
raise ProtocolError(f'PCAP-NG: [if_fcslen] option must be only one, '
23382426
f'but {self._opt[type] + 1} found.')
@@ -2361,6 +2449,9 @@ def _make_option_if_hardware(self, type: 'Enum_OptionType', option: 'Optional[Da
23612449
Constructed option schema.
23622450
23632451
"""
2452+
if self._type != Enum_BlockType.Interface_Description_Block:
2453+
raise ProtocolError(f'PCAP-NG: [if_hardware] option must be in Interface Description Block, '
2454+
f'but found in {self._type} block.')
23642455
if self._opt[type] > 0:
23652456
raise ProtocolError(f'PCAP-NG: [if_hardware] option must be only one, '
23662457
f'but {self._opt[type] + 1} found.')
@@ -2389,6 +2480,9 @@ def _make_option_if_txspeed(self, type: 'Enum_OptionType', option: 'Optional[Dat
23892480
Constructed option schema.
23902481
23912482
"""
2483+
if self._type != Enum_BlockType.Interface_Description_Block:
2484+
raise ProtocolError(f'PCAP-NG: [if_txspeed] option must be in Interface Description Block, '
2485+
f'but found in {self._type} block.')
23922486
if self._opt[type] > 0:
23932487
raise ProtocolError(f'PCAP-NG: [if_txspeed] option must be only one, '
23942488
f'but {self._opt[type] + 1} found.')
@@ -2417,6 +2511,9 @@ def _make_option_if_rxspeed(self, type: 'Enum_OptionType', option: 'Optional[Dat
24172511
Constructed option schema.
24182512
24192513
"""
2514+
if self._type != Enum_BlockType.Interface_Description_Block:
2515+
raise ProtocolError(f'PCAP-NG: [if_txspeed] option must be in Interface Description Block, '
2516+
f'but found in {self._type} block.')
24202517
if self._opt[type] > 0:
24212518
raise ProtocolError(f'PCAP-NG: [if_txspeed] option must be only one, '
24222519
f'but {self._opt[type] + 1} found.')

0 commit comments

Comments
 (0)