scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

commit e776065632d998cb8491dded4d3c809ac272f5fc
parent 11f2d4ad18c54ed4b3147efb7554820173edd38c
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Thu, 20 Feb 2025 10:31:50 +0100

libmach: Use long for offset

As we use standard fseek() and ftell() we cannot support
files that cannot be addressed with longs, so it is better
to check for these problems when reading files and use
long after that point.

Diffstat:
Minclude/bits/scc/mach.h | 3+--
Msrc/libmach/elf/elfread.c | 2++
2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/include/bits/scc/mach.h b/include/bits/scc/mach.h @@ -84,7 +84,7 @@ struct section { unsigned long long base; unsigned long long load; unsigned long long size; - unsigned long long offset; + long offset; unsigned flags; int index; @@ -112,7 +112,6 @@ struct map { struct mapsec *seg; }; - /** * @stype: Used internally by libmach * @dtype: Coff debug type diff --git a/src/libmach/elf/elfread.c b/src/libmach/elf/elfread.c @@ -436,6 +436,8 @@ readphdr(Obj *obj, FILE *fp) if (fread(buf, hdr->phentsize, 1, fp) != 1) goto err1; (*u->phdr)(ORDER(obj->type), buf, &phdr[i]); + if (phdr[i].offset > LONG_MAX) + goto err1; } r = 1;