X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=direct.c;h=e3685d1c8eef7c245370338c30347b215c6f4994;hb=refs%2Ftags%2Fv2.1.11;hp=e022398ca56d8b089bfcd16149097e84b3ca6b26;hpb=1cd9ca4c09a0e744829b3edb127feb1abd41d35c;p=rmac diff --git a/direct.c b/direct.c index e022398..e3685d1 100644 --- a/direct.c +++ b/direct.c @@ -1,7 +1,7 @@ // -// RMAC - Reboot's Macro Assembler for all Atari computers +// RMAC - Renamed Macro Assembler for all Atari computers // DIRECT.C - Directive Handling -// Copyright (C) 199x Landon Dyer, 2011-2020 Reboot and Friends +// Copyright (C) 199x Landon Dyer, 2011-2021 Reboot and Friends // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986 // Source utilised with the kind permission of Landon Dyer // @@ -584,7 +584,7 @@ int d_incbin(void) // Attempt to open the include file in the current directory, then (if that // failed) try list of include files passed in the enviroment string or by - // the "-d" option. + // the "-i" option. TOKEN filename = tok[1]; if ((fd = open(string[filename], _OPEN_INC)) < 0) @@ -622,6 +622,10 @@ allright: close(fd); return ERROR; } + if ((int64_t)size <= 0) + { + return error("invalid incbin size requested"); + } } else size = lseek(fd, 0L, SEEK_END); @@ -642,6 +646,10 @@ allright: lseek(fd, pos, SEEK_SET); size -= pos; + if ((int64_t)size < 0) + { + return error("requested incbin size out of range"); + } } else { @@ -650,14 +658,14 @@ allright: } } else - return(comma_error); + return error(comma_error); } else pos = lseek(fd, 0L, SEEK_SET); } else { - //size_pos_fallthrough: + // size & pos not given, so assume offset of 0 and all of the binary size = lseek(fd, 0L, SEEK_END); pos = lseek(fd, 0L, SEEK_SET); }