From 5b4769c3605454580cc4f44a52d6249b4ac6c590 Mon Sep 17 00:00:00 2001 From: douniwan5788 Date: Thu, 3 Oct 2024 13:19:36 +0800 Subject: [PATCH] Add align_from attribute to PadField --- scapy/fields.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/scapy/fields.py b/scapy/fields.py index 06d73225589..838d9f3f053 100644 --- a/scapy/fields.py +++ b/scapy/fields.py @@ -625,17 +625,19 @@ def fld(self): class PadField(_FieldContainer): """Add bytes after the proxified field so that it ends at the specified alignment from its beginning""" - __slots__ = ["fld", "_align", "_padwith"] + __slots__ = ["fld", "_align", "_align_from", "_padwith"] - def __init__(self, fld, align, padwith=None): - # type: (AnyField, int, Optional[bytes]) -> None + def __init__(self, fld, align=None, align_from=None, padwith=None): + # type: (AnyField, Optional[int], Optional[Callable[[Packet], int]], Optional[bytes]) -> None # noqa: E501 self.fld = fld - self._align = align + self._align_from = align_from or (lambda x: 0) + if align is not None: + self._align_from = lambda x, align=align: align # type: ignore self._padwith = padwith or b"\x00" def padlen(self, flen, pkt): # type: (int, Packet) -> int - return -flen % self._align + return -flen % self._align_from(pkt) def getfield(self, pkt, # type: Packet