refactor(node-sea): reuse Mach-O segment facts

This commit is contained in:
morluto
2026-10-27 10:44:51 +08:00
parent 79b8219f29
commit 6fa8e2ee3d
+15 -13
View File
@@ -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