Skip to content

Commit 1e5240c

Browse files
authored
add: warn on duplicate register constraint (#82)
1 parent 26e99e9 commit 1e5240c

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

crackers_python/crackers/config/constraint.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,10 +189,17 @@ def serialize_state_constraints(value, _info):
189189
"size": mem.size,
190190
"value": mem.value,
191191
}
192+
register_valuations = [v for v in filtered if isinstance(v, RegisterValuation)]
193+
if register_valuations:
194+
keys = [reg.name for reg in register_valuations]
195+
if len(keys) > len(set(keys)):
196+
import warnings
197+
198+
warnings.warn(
199+
"Multiple register valuation constraints found for a single register; only the last will be serialized."
200+
)
192201
transformed = {
193-
"register": {
194-
v.name: v.value for v in filtered if isinstance(v, RegisterValuation)
195-
},
202+
"register": {v.name: v.value for v in register_valuations},
196203
"memory": memory_dict,
197204
"pointer": {
198205
v.reg: v.value

crackers_python/crackers/config/crackers.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
from pydantic import BaseModel
2-
from crackers.config.constraint import ConstraintConfig, CustomStateConstraint, \
3-
CustomTransitionConstraint
2+
from crackers.config.constraint import (
3+
ConstraintConfig,
4+
CustomStateConstraint,
5+
CustomTransitionConstraint,
6+
)
47
from crackers.config.library import LibraryConfig
58
from crackers.config.meta import MetaConfig
69
from crackers.config.sleigh import SleighConfig

0 commit comments

Comments
 (0)