Prevent buffer overrun by DF command

This commit is contained in:
kichikuou
2020-06-14 22:09:14 +09:00
parent e17b447e73
commit 725b0ee6ab
+10
View File
@@ -76,11 +76,21 @@ void commandDR() {
void commandDF() {
int *data_var = getCaliVariable();
int varno = preVarNo;
int cnt = getCaliValue();
int data = getCaliValue();
DEBUG_COMMAND("DF %p,%d,%d:\n", data_var, cnt, data);
const arrayVarStruct* array = &sysVarAttribute[varno];
if (array->page) {
int maxlen = arrayVarBuffer[array->page - 1].max - array->offset - *array->pointvar;
if (cnt > maxlen) {
WARNING("%03d:%05x: count exceeds array boundary (%d > %d)\n", sl_getPage(), sl_getIndex(), cnt, maxlen);
cnt = maxlen;
}
}
while (cnt--) {
*data_var = data; data_var++;
}