Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Packet.fields_desc type annotation is inconsistent with runtime behavior #5018

Copy link
Copy link

Description

@anci3ntr0ck
Issue body actions

Brief description

Packet.fields_desc supports Packet / Packet_metaclass but typed as List[AnyField]

Scapy version

2.7.0

Python version

3.14

Operating system

Windows11

Additional environment information

No response

How to reproduce

The type annotation for fields_desc on Packet classes is declared as List[AnyField]:

# scapy/packet.py, line 108
fields_desc = []  # type: List[AnyField]

However, at runtime, the Packet_metaclass.__new__ method explicitly handles the case where elements in fields_desc are Packet metaclass instances (i.e., references to other Packet subclasses), not just Field instances:

# scapy/base_classes.py, lines 371-380
        if "fields_desc" in dct:  # perform resolution of references to other packets  # noqa: E501
            current_fld = dct["fields_desc"]  # type: List[Union[scapy.fields.Field[Any, Any], Packet_metaclass]]  # noqa: E501
            resolved_fld = []  # type: List[scapy.fields.Field[Any, Any]]
            for fld_or_pkt in current_fld:
                if isinstance(fld_or_pkt, Packet_metaclass):
                    # reference to another fields_desc
                    for pkt_fld in fld_or_pkt.fields_desc:
                        resolved_fld.append(pkt_fld)
                else:
                    resolved_fld.append(fld_or_pkt)

This means fields_desc can contain:

  1. Field instances — the documented/typed behavior
  2. Packet classes (metaclass instances) — which get inlined/expanded by flattening their fields_desc

Actual result

No response

Expected result

The type should be updated to something like:

fields_desc = []  # type: List[Union[AnyField, Type[Packet]]]

Related resources

No response

Reactions are currently unavailable

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    Morty Proxy This is a proxified and sanitized view of the page, visit original site.