mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-27 00:28:14 +00:00
Merge pull request #6165 from MarcZX10/codex/unwrap-self-truncated-elf
fix(tools): reject unsupported inner ELF encodings
This commit is contained in:
2 files changed
+13
No files matched your search
@@ -300,6 +300,17 @@ class UnwrapTest(unittest.TestCase):
|
||||
self.assertNotIn("Traceback", result.stderr)
|
||||
self.assertEqual(output.read_bytes(), b"previous output")
|
||||
|
||||
def test_unsupported_inner_elf_class_and_byte_order_are_refused(self):
|
||||
for offset, value in ((4, 1), (5, 2)):
|
||||
with self.subTest(offset=offset, value=value):
|
||||
container = bytearray(build_container(default_segments(), default_records(), default_payloads()))
|
||||
container[ELF_HEADER_OFFSET + offset] = value
|
||||
result, output = self.convert(bytes(container))
|
||||
self.assertEqual(result.returncode, 2)
|
||||
self.assertIn("inner ELF is not 64-bit little-endian", result.stderr)
|
||||
self.assertNotIn("Traceback", result.stderr)
|
||||
self.assertFalse(output.exists())
|
||||
|
||||
def test_a_container_whose_load_segments_look_encrypted_is_refused(self):
|
||||
random_like = bytes(range(256)) * 4
|
||||
segments = [(PT_LOAD, 1, 0x1234, 0x0, 0x400, PAGE), (PT_LOAD, 4, 0x1500, 0x1000, 0x400, PAGE)]
|
||||
|
||||
@@ -108,6 +108,8 @@ def parse_elf(data):
|
||||
if inner + 0x40 > len(data):
|
||||
raise Refused("inner ELF header is truncated")
|
||||
header = bytearray(data[inner:inner + 0x40])
|
||||
if header[4] != 2 or header[5] != 1:
|
||||
raise Refused("inner ELF is not 64-bit little-endian")
|
||||
program_offset = struct.unpack_from("<Q", header, 0x20)[0]
|
||||
entry_size = struct.unpack_from("<H", header, 0x36)[0]
|
||||
count = struct.unpack_from("<H", header, 0x38)[0]
|
||||
|
||||
Reference in new issue
Block a user