aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/process.zig7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/lib/process.zig b/src/lib/process.zig
index 8aaf972..c167363 100644
--- a/src/lib/process.zig
+++ b/src/lib/process.zig
@@ -33,6 +33,7 @@ pub const Error = error{
};
pub const ExeError = error{
+ TooSmall,
BadEndian,
BadArch,
BadBitLen,
@@ -226,8 +227,12 @@ pub fn switchTo(proc: *Info) noreturn {
unreachable;
}
+const HdrBuf = *align(@alignOf(elf.Elf64_Ehdr)) const [@sizeOf(elf.Elf64_Ehdr)]u8;
+
pub fn create(allocator: std.mem.Allocator, elf_buf: []align(@alignOf(elf.Elf64_Ehdr)) const u8) !*Info {
- const hdr_buf: *align(@alignOf(elf.Elf64_Ehdr)) const [@sizeOf(elf.Elf64_Ehdr)]u8 = elf_buf[0..@sizeOf(elf.Elf64_Ehdr)];
+ if (elf_buf.len < @sizeOf(elf.Elf64_Ehdr)) return ExeError.TooSmall;
+
+ const hdr_buf: HdrBuf = elf_buf[0..@sizeOf(elf.Elf64_Ehdr)];
const hdr = try elf.Header.parse(@ptrCast(hdr_buf));
try validateElfHeader(hdr, hdr_buf);