Skip to content

Commit 871e3a6

Browse files
authored
Merge pull request #3445 from trailofbits/3420-support-flip-endianness
Adds support for flipped endianness
2 parents 1ad8585 + 2df44c8 commit 871e3a6

File tree

187 files changed

+328
-201
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

187 files changed

+328
-201
lines changed

polyfile/kaitai/compiler.py

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,21 @@ def __str__(self):
4545
return f"{self.ksy_file}: {super().__str__()}"
4646

4747

48+
def _fix_pkg_resources_import(python_path: Path) -> None:
49+
"""Replace deprecated pkg_resources import with packaging.version.
50+
51+
Kaitai Struct Compiler v0.9 generates code that imports parse_version from
52+
pkg_resources, which is deprecated and unavailable on Python 3.12+.
53+
"""
54+
content = python_path.read_text()
55+
if "from pkg_resources import parse_version" in content:
56+
content = content.replace(
57+
"from pkg_resources import parse_version",
58+
"from packaging.version import parse as parse_version"
59+
)
60+
python_path.write_text(content)
61+
62+
4863
class CompiledKSY:
4964
def __init__(self, class_name: str, python_path: Union[str, Path], dependencies: Iterable["CompiledKSY"] = ()):
5065
self.class_name: str = class_name
@@ -117,17 +132,26 @@ def compile(ksy_path: Union[str, Path], output_directory: Union[str, Path], auto
117132
if "errors" in first_spec:
118133
for error in first_spec["errors"]:
119134
raise CompilationError(ksy_file=error["file"], message=error["message"])
135+
136+
main_python_path = output_directory / first_spec["files"][0]["fileName"]
137+
dependencies = [
138+
CompiledKSY(
139+
class_name=compiled["topLevelName"],
140+
python_path=output_directory / compiled["files"][0]["fileName"]
141+
)
142+
for spec_name, compiled in result[ksy_path]["output"]["python"].items()
143+
if spec_name != first_spec_name
144+
]
145+
146+
# Fix deprecated pkg_resources import in all generated files
147+
_fix_pkg_resources_import(main_python_path)
148+
for dep in dependencies:
149+
_fix_pkg_resources_import(dep.python_path)
150+
120151
return CompiledKSY(
121152
class_name=first_spec["topLevelName"],
122-
python_path=output_directory / first_spec["files"][0]["fileName"],
123-
dependencies=(
124-
CompiledKSY(
125-
class_name=compiled["topLevelName"],
126-
python_path=output_directory / compiled["files"][0]["fileName"]
127-
)
128-
for spec_name, compiled in result[ksy_path]["output"]["python"].items()
129-
if spec_name != first_spec_name
130-
)
153+
python_path=main_python_path,
154+
dependencies=dependencies
131155
)
132156

133157

polyfile/kaitai/parsers/aix_utmp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
22

3-
from pkg_resources import parse_version
3+
from packaging.version import parse as parse_version
44
import kaitaistruct
55
from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
66
from enum import Enum

polyfile/kaitai/parsers/allegro_dat.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
22

3-
from pkg_resources import parse_version
3+
from packaging.version import parse as parse_version
44
import kaitaistruct
55
from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
66
from enum import Enum

polyfile/kaitai/parsers/andes_firmware.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
22

3-
from pkg_resources import parse_version
3+
from packaging.version import parse as parse_version
44
import kaitaistruct
55
from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
66
import collections

polyfile/kaitai/parsers/android_bootldr_asus.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
22

3-
from pkg_resources import parse_version
3+
from packaging.version import parse as parse_version
44
import kaitaistruct
55
from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
66
import collections

polyfile/kaitai/parsers/android_bootldr_huawei.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
22

3-
from pkg_resources import parse_version
3+
from packaging.version import parse as parse_version
44
import kaitaistruct
55
from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
66
import collections

polyfile/kaitai/parsers/android_bootldr_qcom.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
22

3-
from pkg_resources import parse_version
3+
from packaging.version import parse as parse_version
44
import kaitaistruct
55
from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
66
import collections

polyfile/kaitai/parsers/android_dto.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
22

3-
from pkg_resources import parse_version
3+
from packaging.version import parse as parse_version
44
import kaitaistruct
55
from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
66
import collections

polyfile/kaitai/parsers/android_img.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
22

3-
from pkg_resources import parse_version
3+
from packaging.version import parse as parse_version
44
import kaitaistruct
55
from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
66
import collections

polyfile/kaitai/parsers/android_nanoapp_header.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
22

3-
from pkg_resources import parse_version
3+
from packaging.version import parse as parse_version
44
import kaitaistruct
55
from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
66
import collections

0 commit comments

Comments
 (0)