features: make features implement __lt__

This commit is contained in:
Willi Ballenthin
2022-05-25 15:08:26 -06:00
parent a4003d7d91
commit d7cfa4ee96
5 changed files with 8 additions and 6 deletions

View File

@@ -20,7 +20,7 @@ class BasicBlock(Feature):
return ""
def freeze_serialize(self):
return (self.__class__.__name__, [])
return (self.__class__.__name__, ())
@classmethod
def freeze_deserialize(cls, args):

View File

@@ -107,6 +107,9 @@ class Feature(abc.ABC):
def __hash__(self):
return hash((self.name, self.value))
def __lt__(self, other):
return self.freeze_serialize() < other.freeze_serialize()
def __eq__(self, other):
return self.name == other.name and self.value == other.value
@@ -137,7 +140,7 @@ class Feature(abc.ABC):
return Result(self in ctx, self, [], locations=ctx.get(self, set()))
def freeze_serialize(self):
return (self.__class__.__name__, [self.value])
return (self.__class__.__name__, (self.value, ))
@classmethod
def freeze_deserialize(cls, args):
@@ -374,7 +377,7 @@ class Bytes(Feature):
return hex_string(bytes_to_str(self.value))
def freeze_serialize(self):
return (self.__class__.__name__, [bytes_to_str(self.value).upper()])
return (self.__class__.__name__, (bytes_to_str(self.value).upper(), ))
@classmethod
def freeze_deserialize(cls, args):

View File

@@ -68,7 +68,7 @@ class _Operand(Feature, abc.ABC):
return super().__eq__(other) and self.index == other.index
def freeze_serialize(self):
return (self.__class__.__name__, [self.index, self.value])
return (self.__class__.__name__, (self.index, self.value))
class OperandNumber(_Operand):

View File

@@ -15,7 +15,6 @@ import capa.features.common
import capa.render.result_document as rd
from capa.rules import RuleSet
from capa.engine import MatchResults
from capa.features.freeze import deserialize_address
def render_locations(ostream, match):

View File

@@ -62,8 +62,8 @@ import capa.engine
import capa.helpers
import capa.features
import capa.exceptions
import capa.render.verbose
import capa.render.utils as rutils
import capa.render.verbose
import capa.features.freeze
import capa.render.result_document as rd
from capa.helpers import get_file_taste