Sleigh token fields bounds

A token field should be bound by the size of the token, avoid invalid
fields, most likely off-by-one errors
This commit is contained in:
mumbel 2020-03-23 23:14:46 -05:00
parent c1a1482988
commit a7ceaedb0c

View file

@ -212,7 +212,11 @@ fielddef
} fieldmods) { } fieldmods) {
if ($fielddef.size() > 0 && $fielddef::fieldQuality != null) { if ($fielddef.size() > 0 && $fielddef::fieldQuality != null) {
if ($tokendef.size() > 0 && $tokendef::tokenSymbol != null) { if ($tokendef.size() > 0 && $tokendef::tokenSymbol != null) {
if ($tokendef::tokenSymbol.getToken().getSize()*8 <= $fielddef::fieldQuality.high) {
reportError(find($t), "field high must be less than token size");
} else {
sc.addTokenField(find(n), $tokendef::tokenSymbol, $fielddef::fieldQuality); sc.addTokenField(find(n), $tokendef::tokenSymbol, $fielddef::fieldQuality);
}
} else if ($contextdef.size() > 0 && $contextdef::varnode != null) { } else if ($contextdef.size() > 0 && $contextdef::varnode != null) {
if (!sc.addContextField($contextdef::varnode, $fielddef::fieldQuality)) { if (!sc.addContextField($contextdef::varnode, $fielddef::fieldQuality)) {
reportError(find($t), "all context definitions must come before constructors"); reportError(find($t), "all context definitions must come before constructors");