Fix for padding encoding in Python 3.
authormefistotelis <mefistotelis@gmail.com>
Tue, 20 Dec 2016 21:04:52 +0000 (22:04 +0100)
committermefistotelis <mefistotelis@gmail.com>
Tue, 20 Dec 2016 21:44:43 +0000 (22:44 +0100)
The padding used a string literal instead of byte literal for the
pattern character, which caused invalid type error in Python 3.

This fix marks the pattern as byte literal, which does nothing on
Python >= 2.7 and creates byres array instead of str in Python >= 3.

elftools/construct/adapters.py
elftools/construct/macros.py

index 26e5c67bf47c72bdbe46cf16a7ab9cc3f4284ddf..c6251d4ea4e380d775f0052d605c3a468e545e5d 100644 (file)
@@ -380,12 +380,12 @@ class PaddingAdapter(Adapter):
     
     Parameters:
     * subcon - the subcon to pad
-    * pattern - the padding pattern (character). default is "\x00"
+    * pattern - the padding pattern (character as byte). default is b"\x00"
     * strict - whether or not to verify, during parsing, that the given 
       padding matches the padding pattern. default is False (unstrict)
     """
     __slots__ = ["pattern", "strict"]
-    def __init__(self, subcon, pattern = "\x00", strict = False):
+    def __init__(self, subcon, pattern = b"\x00", strict = False):
         Adapter.__init__(self, subcon)
         self.pattern = pattern
         self.strict = strict
index 5e893ddeb4e7f8f2a04c1ec4862d4ed8600645af..b62a18cd160279fa1d38ae8ec9a0c4c11f22cfa5 100644 (file)
@@ -69,12 +69,12 @@ def BitField(name, length, swapped = False, signed = False, bytesize = 8):
         bytesize=bytesize
     )
 
-def Padding(length, pattern = "\x00", strict = False):
+def Padding(length, pattern = b"\x00", strict = False):
     r"""a padding field (value is discarded)
     * length - the length of the field. the length can be either an integer,
       or a function that takes the context as an argument and returns the
       length
-    * pattern - the padding pattern (character) to use. default is "\x00"
+    * pattern - the padding pattern (character/byte) to use. default is b"\x00"
     * strict - whether or not to raise an exception is the actual padding
       pattern mismatches the desired pattern. default is False.
     """