summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2021-06-29 15:18:41 -0400
committerGlenn Smith <glenn@vector35.com>2021-07-01 01:32:29 -0400
commit6183f2b4102325f1c76b91c5fa986fea56b5ecaf (patch)
treea90c386cd9cfd3ca7b12ec0fd729bd0c1e82a31b
parenta719ec03c082ad64dece5dcae8e386bd65879843 (diff)
Old tags test case
m---------suite/binaries0
-rw-r--r--suite/testcommon.py66
2 files changed, 66 insertions, 0 deletions
diff --git a/suite/binaries b/suite/binaries
-Subproject 37a3fa26e79b78d60e41fcbb3708840e7a79fdf
+Subproject b8b97ae750cad5c8db10f059379c822e82d5491
diff --git a/suite/testcommon.py b/suite/testcommon.py
index a70ec09f..9a811670 100644
--- a/suite/testcommon.py
+++ b/suite/testcommon.py
@@ -1843,3 +1843,69 @@ class VerifyBuilder(Builder):
self.delete_package("basic_struct")
return ret
+
+ def test_old_tags(self):
+ """
+ New builds use string-based ids for tags, whereas older builds used integers. Make sure the old builds still work
+ """
+
+ file_name = self.unpackage_file("old_tags.bndb")
+ ret = True
+ try:
+ binja.Settings().set_bool("analysis.database.suppressReanalysis", True)
+ with BinaryViewType.get_view_of_file_with_options(file_name) as bv:
+ if bv is None:
+ ret = False
+ raise Exception("File load error")
+ if not bv.file.snapshot_data_applied_without_error:
+ ret = False
+ raise Exception("Snapshot apply error")
+
+ # Make sure the tags exist and are where we expect them
+ _start = bv.get_function_at(bv.start + 0x1060)
+ sub_1012 = bv.get_function_at(bv.start + 0x1012)
+
+ assert len(bv.get_data_tags_at(bv.start + 0x6030)) == 1
+ assert bv.get_data_tags_at(bv.start + 0x6030)[0].type.name == 'Bookmarks'
+ assert bv.get_data_tags_at(bv.start + 0x6030)[0].data == '2'
+ assert bv.get_data_tags_at(bv.start + 0x6030)[0].id == '7'
+
+ assert len(bv.get_data_tags_at(bv.start + 0x6040)) == 2
+ assert bv.get_data_tags_at(bv.start + 0x6040)[0].type.name == 'Crashes'
+ assert bv.get_data_tags_at(bv.start + 0x6040)[0].data == 'New Tag'
+ assert bv.get_data_tags_at(bv.start + 0x6040)[0].id == '8'
+ assert bv.get_data_tags_at(bv.start + 0x6040)[1].type.name == 'Library'
+ assert bv.get_data_tags_at(bv.start + 0x6040)[1].data == 'New Tag'
+ assert bv.get_data_tags_at(bv.start + 0x6040)[1].id == '9'
+
+ assert len(_start.function_tags) == 1
+ assert _start.function_tags[0].type.name == 'Library'
+ assert _start.function_tags[0].data == 'New Tag'
+ assert _start.function_tags[0].id == '1'
+
+ assert len(sub_1012.function_tags) == 2
+ assert sub_1012.function_tags[0].type.name == 'Library'
+ assert sub_1012.function_tags[0].data == 'New Tag'
+ assert sub_1012.function_tags[0].id == '3'
+ assert sub_1012.function_tags[1].type.name == 'Bugs'
+ assert sub_1012.function_tags[1].data == 'New Tag'
+ assert sub_1012.function_tags[1].id == '10'
+
+ assert len(_start.get_address_tags_at(bv.start + 0x1097)) == 1
+ assert _start.get_address_tags_at(bv.start + 0x1097)[0].type.name == 'Important'
+ assert _start.get_address_tags_at(bv.start + 0x1097)[0].data == 'New Tag'
+ assert _start.get_address_tags_at(bv.start + 0x1097)[0].id == '4'
+
+ assert len(_start.get_address_tags_at(bv.start + 0x1116)) == 2
+ assert _start.get_address_tags_at(bv.start + 0x1116)[0].type.name == 'Crashes'
+ assert _start.get_address_tags_at(bv.start + 0x1116)[0].data == 'New Tag'
+ assert _start.get_address_tags_at(bv.start + 0x1116)[0].id == '5'
+ assert _start.get_address_tags_at(bv.start + 0x1116)[1].type.name == 'Needs Analysis'
+ assert _start.get_address_tags_at(bv.start + 0x1116)[1].data == 'New Tag'
+ assert _start.get_address_tags_at(bv.start + 0x1116)[1].id == '6'
+
+ binja.Settings().reset("analysis.database.suppressReanalysis")
+ finally:
+ self.delete_package("old_tags.bndb")
+
+ return ret \ No newline at end of file