From 3620999240fe0ae65eaa944e196a3da4ab86ec9c Mon Sep 17 00:00:00 2001 From: Pompolic <pompolic@special-circumstanc.es> Date: Tue, 7 Sep 2021 21:04:18 +0200 Subject: [PATCH] Bugfix: initialize HParserEnv before name lookup name_from_vtable() needed the top_level_parse attribute --- gdb-port/parser-type-instrumentation-gdb.py | 22 ++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/gdb-port/parser-type-instrumentation-gdb.py b/gdb-port/parser-type-instrumentation-gdb.py index 0ed97e5..ab07329 100644 --- a/gdb-port/parser-type-instrumentation-gdb.py +++ b/gdb-port/parser-type-instrumentation-gdb.py @@ -145,6 +145,7 @@ class BitsEnv(HParserEnv): class ButNotEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser + super().__init__(parser, top_level_parse) p1_p = gdb.parse_and_eval("((HTwoParsers *) parser->env)->p1") p1_obj = top_level_parse.add_or_get_parser(p1_p) @@ -156,7 +157,6 @@ class ButNotEnv(HParserEnv): if p2_obj.name is None: p2_obj.name_parser( self.name_from_vtable(p2_obj) ) self.p2 = p2_obj - super().__init__(parser, top_level_parse) def __str__(self): return str([str(self.p1), str(self.p2)]) @@ -249,6 +249,7 @@ class ChoiceEnv(HParserEnv): class DifferenceEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser + super().__init__(parser, top_level_parse) #TODO: maybe have a class for HTwoParsers-based envs p1_p = gdb.parse_and_eval("((HTwoParsers *) parser->env)->p1") @@ -261,7 +262,6 @@ class DifferenceEnv(HParserEnv): if p2_obj.name is None: p2_obj.name_parser( self.name_from_vtable(p2_obj) ) self.p2 = p2_obj - super().__init__(parser, top_level_parse) def __str__(self): return str([str(self.p1), str(self.p2)]) @@ -277,6 +277,7 @@ class EndEnv(HParserEnv): class EndiannessEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser + super().__init__(parser, top_level_parse) member_parser_p = gdb.parse_and_eval("((HParseEndianness *) parser->env)->p") parser_obj = top_level_parse.add_or_get_parser(member_parser_p) @@ -285,7 +286,6 @@ class EndiannessEnv(HParserEnv): self.member_parser = parser_obj endianness_val = gdb.parse_and_eval("((HParseEndianness *) parser->env)->endianness") self.endianness = int(endianness_val) - super().__init__(parser, top_level_parse) def __str__(self): return str([str(self.member_parser), str(self.endianness)]) @@ -364,6 +364,7 @@ class IndirectEnv(HParserEnv): class IntRangeEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser + super().__init__(parser, top_level_parse) member_parser_p = gdb.parse_and_eval("((HRange*) parser->env)->p") parser_obj = top_level_parse.add_or_get_parser(member_parser_p) @@ -374,7 +375,6 @@ class IntRangeEnv(HParserEnv): self.lower = int(lower_val) upper_val = gdb.parse_and_eval("((HRange*) parser->env)->upper") self.upper = int(upper_val) - super().__init__(parser, top_level_parse) def __str__(self): @@ -383,6 +383,7 @@ class IntRangeEnv(HParserEnv): class LengthValueEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser + super().__init__(parser, top_level_parse) length_parser_p = gdb.parse_and_eval("((HLenVal *) parser->env)->length") length_parser_obj = top_level_parse.add_or_get_parser(length_parser_p) @@ -395,7 +396,6 @@ class LengthValueEnv(HParserEnv): if value_parser_obj.name is None: value_parser_obj.name_parser( self.name_from_vtable(value_parser_obj) ) self.value_parser = value_parser_obj - super().__init__(parser, top_level_parse) def __str__(self): return str([str(self.length_parser), str(self.value_parser)]) @@ -417,13 +417,13 @@ class ManyEnv(HParserEnv): class NotEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser + super().__init__(parser, top_level_parse) member_p = gdb.parse_and_eval("(HParser*) parser->env") parser_obj = top_level_parse.add_or_get_parser(member_p) if parser_obj.name is None: parser_obj.name_parser( self.name_from_vtable(parser_obj) ) self.member_parser = parser_obj - super().__init__(parser, top_level_parse) def __str__(self): return str(self.member_parser) @@ -439,13 +439,13 @@ class NothingEnv(HParserEnv): class OptionalEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser + super().__init__(parser, top_level_parse) member_p = gdb.parse_and_eval("(HParser*) parser->env") parser_obj = top_level_parse.add_or_get_parser(member_p) if parser_obj.name is None: parser_obj.name_parser( self.name_from_vtable(parser_obj) ) self.member_parser = parser_obj - super().__init__(parser, top_level_parse) def __str__(self): return str(self.member_parser) @@ -569,6 +569,7 @@ class UnimplemenetedEnv(HParserEnv): class GetEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser + super().__init__(parser, top_level_parse) member_parser_p = gdb.parse_and_eval("((HStoredValue *) parse->env)->p") parser_obj = top_level_parse.add_or_get_parser(member_parser_p) @@ -577,7 +578,6 @@ class GetEnv(HParserEnv): self.member_parser = parser_obj key_p = gdb.parse_and_eval("((HStoredValue *) parse->env)->key") self.key = int(key_p) - super().__init__(parser, top_level_parse) def __str__(self): return str([str(self.member_parser), str(hex(self.key))]) @@ -585,6 +585,7 @@ class GetEnv(HParserEnv): class PutEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser + super().__init__(parser, top_level_parse) member_parser_p = gdb.parse_and_eval("((HStoredValue *) parse->env)->p") parser_obj = top_level_parse.add_or_get_parser(member_parser_p) @@ -593,7 +594,6 @@ class PutEnv(HParserEnv): self.member_parser = parser_obj key_p = gdb.parse_and_eval("((HStoredValue *) parse->env)->key") self.key = int(key_p) - super().__init__(parser, top_level_parse) def __str__(self): return str([str(self.member_parser), str(hex(self.key))]) @@ -601,13 +601,13 @@ class PutEnv(HParserEnv): class WhitespaceEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser + super().__init__(parser, top_level_parse) member_parser_p = gdb.parse_and_eval("(HParser *) parse->env") parser_obj = top_level_parse.add_or_get_parser(member_parser_p) if parser_obj.name is None: parser_obj.name_parser( self.name_from_vtable(parser_obj) ) self.member_parser = parser_obj - super().__init__(parser, top_level_parse) def __str__(self): return str([str(self.member_parser)]) @@ -615,6 +615,7 @@ class WhitespaceEnv(HParserEnv): class XorEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser + super().__init__(parser, top_level_parse) p1_p = gdb.parse_and_eval("((HTwoParsers *) parser->env)->p1") p1_obj = top_level_parse.add_or_get_parser(p1_p) @@ -626,7 +627,6 @@ class XorEnv(HParserEnv): if p2_obj.name is None: p2_obj.name_parser( self.name_from_vtable(p2_obj) ) self.p2 = p2_obj - super().__init__(parser, top_level_parse) def __str__(self): return str([str(self.p1), str(self.p2)]) -- GitLab