Fix validation of dual item instructions.

pull/3/head
Jonathan G Rennison 9 years ago
parent e2435c7169
commit d9acfc4599

@ -427,6 +427,14 @@ CommandCost TraceRestrictProgram::Validate(const std::vector<TraceRestrictItem>
TraceRestrictItem item = items[i];
TraceRestrictItemType type = GetTraceRestrictType(item);
// check multi-word instructions
if (IsTraceRestrictDoubleItem(item)) {
i++;
if (i >= size) {
return_cmd_error(STR_TRACE_RESTRICT_ERROR_OFFSET_TOO_LARGE); // instruction ran off end
}
}
if (IsTraceRestrictConditional(item)) {
TraceRestrictCondFlags condflags = GetTraceRestrictCondFlags(item);
@ -457,13 +465,6 @@ CommandCost TraceRestrictProgram::Validate(const std::vector<TraceRestrictItem>
HandleCondition(condstack, condflags, true);
}
} else {
// check multi-word instructions
if (IsTraceRestrictDoubleItem(item)) {
i++;
if (i >= size) {
return_cmd_error(STR_TRACE_RESTRICT_ERROR_OFFSET_TOO_LARGE); // instruction ran off end
}
}
switch (GetTraceRestrictType(item)) {
case TRIT_PF_DENY:
case TRIT_PF_PENALTY:

Loading…
Cancel
Save