]> Shamusworld >> Repos - rmac/blobdiff - direct.c
Potential fix for bug #175: don't add EQURd symbols to the export list when exporting...
[rmac] / direct.c
index e022398ca56d8b089bfcd16149097e84b3ca6b26..e3685d1c8eef7c245370338c30347b215c6f4994 100644 (file)
--- 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);
        }