github/copilot-sdk · error · IOException

Invalid PT_INTERP bounds

Error message

Invalid PT_INTERP bounds

What it means

When a PT_INTERP program header is found, its p_offset and p_filesz must be sane non-negative sizes within int range and describe a non-empty segment. Nonsensical values indicate a corrupt ELF, so an IOException is thrown rather than reading garbage as the interpreter path.

Solutions

  1. Verify the binary with `readelf -l <path>`; if readelf shows a valid PT_INTERP, fix your probe/read logic (full-file or sufficiently large head read starting at offset 0).
  2. Reinstall/re-download the binary and verify its checksum.
  3. Ensure endianness and ELF class were detected correctly before decoding p_offset/p_filesz.
  4. Treat as input rejection for untrusted files: catch IOException and report a corrupt-ELF message.

Example fix

// before
byte[] probe = readHead(path, 512); // head slice may misalign p_offset decode
// after
byte[] probe = Files.readAllBytes(path);
String interp = readElfPtInterp(probe);
Defensive patterns

Strategy: try-catch

Validate before calling

// Pre-verify with readelf output or ensure a full-file read so PT_INTERP bounds are real
if (Files.size(path) > MAX_PROBE) throw new IOException("Unexpectedly large binary: " + path);

Try / catch

try {
    String interp = readElfPtInterp(probe);
} catch (IOException e) {
    throw new IOException("PT_INTERP bounds invalid in " + path + " (" + e.getMessage() + "); file may be corrupt", e);
}

Prevention

When it happens

Trigger: A PT_INTERP entry whose p_offset is negative or > Integer.MAX_VALUE, or p_filesz <= 0 or > Integer.MAX_VALUE — corrupt program header fields or decoding from a misaligned/truncated probe.

Common situations: Corrupted binaries from partial downloads or bad patches; misaligned header reads because the probe didn't start at file offset 0 or the endianness/class assumptions were violated; fuzzed ELF inputs.

Understand the failure class

Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.

Related errors


AI-assisted analysis of github/copilot-sdk@cd8cf15dc3 (2026-09-09). Data as JSON: /api/errors/babe2d835121c20d. Report an issue: GitHub.

Appendix: source

Thrown at java/sdk/src/main/java/com/github/copilot/ffi/PlatformDetector.java:231

            }

            long pType = readUInt32(probe, base, littleEndian);
            if (pType != PT_INTERP) {
                continue;
            }

            long pOffset;
            long pFileSize;
            if (elfClass == ELF_CLASS_64) {
                pOffset = readUInt64(probe, base + 8, littleEndian);
                pFileSize = readUInt64(probe, base + 32, littleEndian);
            } else {
                pOffset = readUInt32(probe, base + 4, littleEndian);
                pFileSize = readUInt32(probe, base + 16, littleEndian);
            }

            if (pOffset < 0 || pFileSize <= 0 || pOffset > Integer.MAX_VALUE || pFileSize > Integer.MAX_VALUE) {
                throw new IOException("Invalid PT_INTERP bounds");
            }

            int start = (int) pOffset;
            int end = start + (int) pFileSize;
            if (end > size) {
                throw new IOException("PT_INTERP extends past probe window; increase probe size");
            }

            int nulIndex = start;
            while (nulIndex < end && probe[nulIndex] != 0) {
                nulIndex++;
            }
            if (nulIndex == start) {
                throw new IOException("Empty PT_INTERP segment");
            }
            return new String(probe, start, nulIndex - start, StandardCharsets.UTF_8);
        }

View on GitHub (pinned to cd8cf15dc3)