mirror of
https://github.com/morluto/rea
synced 2026-10-28 15:07:26 -04:00
refactor(node-sea): reuse Mach-O segment facts
This commit is contained in:
@@ -272,22 +272,24 @@ const locateThinMachO = async (
|
||||
}
|
||||
if (cmd === LC_SEGMENT || cmd === LC_SEGMENT_64) {
|
||||
const segment64 = cmd === LC_SEGMENT_64;
|
||||
const segmentHeader = segment64 ? 72 : 56;
|
||||
const sectionSize = segment64 ? 80 : 68;
|
||||
const name = cString(commands, offset + 8, 16);
|
||||
const parsedSegment = readMachoSegmentHeader(
|
||||
commands.subarray(offset, offset + cmdsize),
|
||||
segment64,
|
||||
little,
|
||||
);
|
||||
// Incomplete segments cannot establish a SEA carrier. Interpret names
|
||||
// and section framing only from the shared fixed-record observation.
|
||||
const segment = parsedSegment.ok ? parsedSegment.value : undefined;
|
||||
const name =
|
||||
segment === undefined ? undefined : cString(segment.nameBytes, 0, 16);
|
||||
if (
|
||||
(name === "NODE_SEA" || name === "__NODE_SEA") &&
|
||||
cmdsize >= segmentHeader
|
||||
segment !== undefined &&
|
||||
(name === "NODE_SEA" || name === "__NODE_SEA")
|
||||
) {
|
||||
const parsedSegment = readMachoSegmentHeader(
|
||||
commands.subarray(offset, offset + cmdsize),
|
||||
segment64,
|
||||
little,
|
||||
);
|
||||
if (!parsedSegment.ok)
|
||||
throw formatFailure(NODE_SEA_MACHO_SEGMENT_TRUNCATED);
|
||||
const nsects = parsedSegment.value.sectionCount;
|
||||
const table = offset + parsedSegment.value.headerSize;
|
||||
const segmentHeader = segment.headerSize;
|
||||
const nsects = segment.sectionCount;
|
||||
const table = offset + segmentHeader;
|
||||
if (
|
||||
nsects > Math.floor((cmdsize - segmentHeader) / sectionSize) ||
|
||||
table + nsects * sectionSize > offset + cmdsize
|
||||
|
||||
Reference in New Issue
Block a user