close(fd);
return ERROR;
}
+ if ((int64_t)size <= 0)
+ {
+ return error("invalid incbin size requested");
+ }
}
else
size = lseek(fd, 0L, SEEK_END);
}
lseek(fd, pos, SEEK_SET);
- size -= pos;
+ if ((int64_t)(size - pos) < 0)
+ {
+ return error("requested incbin size out of range");
+ }
}
else
{
DEBUG { printf("Directive: .ds.[size] = %u, sloc = $%X\n", siz, sloc); }
uint64_t eval;
+ WORD eattr;
if ((cursect & (M6502 | M56KPXYL)) == 0)
{
auto_even();
}
- if (abs_expr(&eval) != OK)
- return 0;
-
+ if (expr(exprbuf, &eval, &eattr, NULL) < 0)
+ return ERROR;
+
// Check to see if the value being passed in is negative (who the hell does
// that?--nobody does; it's the code gremlins, or rum, what does it)
// N.B.: Since 'eval' is of type uint64_t, if it goes negative, it will